2011-01-13 4 views
0

Я пытаюсь написать UDF, который возвращает, находится ли ячейка на разрыве страницы.Excel UDF обнаруживает разрыв страницы?

До сих пор у меня есть это:

Function pbreak() As Boolean 
    ' Application.Volatile 
    pbreak = False 
    Dim ra As Range 
    Set ra = Application.Caller 
    With ra 
     For i = 1 To .Worksheet.HPageBreaks.Count 
      If .Worksheet.HPageBreaks(i).Location.Row = .Row Then 
       pbreak = True 

      End If 
     Next 
    End With 
End Function 

Это возвращает ошибку #VALUE. Я попытался отладить его, HPageBreaks.Count возвращает 3 (и есть 3 разрыва страницы), но HPageBreaks(i) дает «индекс вне диапазона» -error для всех разрывов страниц, находящихся под текущей ячейкой.

Является ли это ошибкой (то есть .Count неправильно), или есть ли какое-то особое поведение с разрывами страниц, которые мне не хватает?

Есть ли способ исправить это (желательно, не прибегая к on error resume next)?

Благодаря Martin

+0

Ваш код работает ОК для меня (Excel 2003) –

+0

Вы пробовали его с более длинным документом? Я просто протестировал его, и он работает с 3 страницами или меньше, более того, и он работает только на последней странице. Weird. – Martin

+0

yup попробовал это с 7 перерывами страницы. все ОК. Я использую Excel 2003 SP3 –

ответ

1
Option Explicit 

Function pbreak() As Boolean 
    ' Application.Volatile 
    Dim i As Integer 'the missing line 
    pbreak = False 
    Dim ra As Range 
    Set ra = Application.Caller 
    With ra 
     For i = 1 To .Worksheet.HPageBreaks.Count 
      If .Worksheet.HPageBreaks(i).Location.Row <= .Row Then 
       If .Worksheet.HPageBreaks(i).Location.Row = .Row Then 
        pbreak = True 
        'exit the function once a page break is found. 
        Exit Function 
       End If 
      Else 
       Exit Function 
      End If 
     Next 
    End With 
End Function 

EDIT: Всегда используйте Option Explicit & компилировать код, прежде чем использовать его.
Использование Exit Function внутри цикла - это предотвращение его дальнейшего запуска, как только результат будет известен.

+0

Это похоже на работу, спасибо! Я все еще недоумеваю, почему hpagebreaks дальше вниз недоступны, особенно почему (или как) .count отличается от фактической длины списка. – Martin

Смежные вопросы