2011-01-13 10 views
0

私は、セルが改ページにあるかどうかを返すUDFを記述しようとしています。これは#VALUEエラーを返し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 

これまでのところ、私はこれを持っています。私はそれをデバッグしようとしましたが、HPageBreaks.Countは3を返しますが、3つの改ページがありますが、HPageBreaks(i)は、現在のセルの下にあるすべてのページブレークに対して "範囲外のインデックス"エラーを生成します。

これはバグですか(例:.Countが間違っていますか)か、または改ページに特別な動作がありますか?

これを修正する方法はありますか(好ましくはに頼らないでください)。

おかげ マーティン

+0

コードが正常に機能します(Excel 2003) –

+0

長いドキュメントで試しましたか?私はちょうどそれをテストし、3ページ以下で動作し、それ以上のものであり、最後のページでのみ動作します。奇妙な。 – 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さらに下にアクセスできない理由、特に(またはどのように)カウントが実際のリストの長さと異なるのか困惑しています。 – Martin

関連する問題