2011-01-13 3 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)은 현재 셀 아래에있는 모든 페이지 브레이크에 대해 "범위를 벗어난 인덱스"오류를 생성합니다.

버그입니까? 예 : .Count가 잘못 되었나요? 아니면 누락 된 페이지 나누기와 함께 특별한 동작이 있습니까?

이 문제를 해결할 수있는 방법이 있습니까 (가급적이면 on error resume next에 의지하지 않고)?

감사 마틴

+0

코드가 정상적으로 작동합니다 (Excel 2003) –

+0

더 긴 문서를 사용해 보셨습니까? 방금 테스트했는데 3 페이지 이하로 작동하며 그 이상으로 작동하며 마지막 페이지에서만 작동합니다. 기묘한. – Martin

+0

예쁘게 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 

편집 : 항상 Option Explicit &이 그것을 사용하기 전에 코드를 컴파일 사용합니다.
루프 내부에 Exit Function을 사용하면 결과를 알면 코드가 더 이상 실행되지 않습니다.

+0

사용하고 있습니다. 감사합니다! 나는 왜 hpagebreaks가 더 이상 아래로 떨어지는 지, 특히 (또는 어떻게) .count가 실제 목록 길이와 다른지에 대해 여전히 의아해하고 있습니다. – Martin

관련 문제