Excel UDF обнаруживает разрывы страниц? - PullRequest
0 голосов
/ 13 января 2011

Я пытаюсь написать 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) выдает ошибку "index out of range" для всех разрывов страниц, которые находятся ниже текущей ячейки.

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

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

Спасибо, Мартин

1 Ответ

1 голос
/ 13 января 2011
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

РЕДАКТИРОВАТЬ: всегда используйте Option Explicit и скомпилируйте код перед его использованием.
Использование Exit Function внутри цикла позволяет предотвратить дальнейший запуск кода после получения результата.

...