概要
この資料では、VBA マクロで改ページの Location プロパティまたは Location.Address を使用するとエラー メッセージが表示される現象について説明しています。
現象
VBA マクロで垂直方向または水平方向の改ページ (VPageBreak オブジェクトまたは HPageBreak オブジェクト) の Location プロパティまたは Location.Address を使用すると、次のエラー メッセージが表示されることがあります。
実行時エラー '9':
インデックスが有効範囲にありません。発生条件
この現象は、次のすべての条件に該当する場合に発生することがあります。
-
HPageBreaks インデックスによって参照されている水平方向の改ページより上にアクティブ セルがある場合。または、VPageBreaks インデックスによって参照されている垂直方向の改ページより左にアクティブ セルがある場合。
-
垂直方向の改ページ位置または水平方向の改ページ位置が、表示可能なウィンドウよりも右側またはブックの表示可能なウィンドウよりも下側にあり、画面から見えなくなっている場合。
-
次のコードに似た VBA マクロを使用している場合。
Sub TestHorizontal()
ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(1).Location.Address MsgBox ActiveSheet.HPageBreaks(2).Location.Address End Sub Sub TestVertical() ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.VPageBreaks.Count MsgBox ActiveSheet.VPageBreaks(1).Location.Address MsgBox ActiveSheet.VPageBreaks(2).Location.Address MsgBox ActiveSheet.VPageBreaks(3).Location.Address End Sub
原因
VPageBreaks または HPageBreaks プロパティと共に Count メソッドを使用した場合、結果にゼロが返されることがあるためです。
状況
この現象は弊社にて Excel の問題として確認しています。
回避策
コードで垂直方向または水平方向改ページの Location プロパティを使用する前に、ワークシートの最後のセルを選択するコードを追加します。
例えば、次のコードを使用して、最後のセルを選択し、Location プロパティを使用してから、最初のアクティブ セルを再度選択します。注意
このサンプル コードは、プログラミング言語の使用方法の一例であり、マイクロソフトにてその動作を保証するものではありません。
適用するアプリケーションに合わせて修正し、かつ十分なテストを実施したうえで使用してください。Sub TestHorizontal()
ActiveSheet.Range("CZ1000").Value = 1 '"currcell" オブジェクトにアクティブ セルを保存する Set currcell = ActiveCell Range("a1").SpecialCells(xlCellTypeLastCell).Select MsgBox ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(1).Location.Address MsgBox ActiveSheet.HPageBreaks(2).Location.Address '保存しておいたアクティブ セルを再び選択する currcell.Select End Sub
通常、Location プロパティを使用した後、最初のアクティブ セルを再度選択します。最初のセルと最後のセルの間をスクロールするコードを使用した場合、または最後のセルを選択した直後に最初のセルを再選択した場合、エラーは引き続き発生します。このエラーを回避するには画面を再描画し、Location プロパティを再計算する必要があります。前述のコードに以下のコードを追加すると、
Application.ScreenUpdating = False
画面が再描画されないため、問題は引き続き発生します。
詳細
垂直方向または水平方向改ページの Count メソッドは、改ページがブック ウィンドウの表示可能な範囲のそばにある場合は期待どおりの結果を返します。
ブック ウィンドウの右側またはブック ウィンドウの下側にある改ページでは、ウィンドウの内容から改ページまでの距離が改ページ間の距離の半分よりも少ない場合は、Count メソッドが動作し、改ページの検索ができます。 例えば、入力されたデータが 2 ページ分の行数を超えない行数 (1 ページに含まれる行 X 2 - 1 行) までの場合には正しくマクロが実行されます。 この現象は 1 ページに含まれる行数にも依存して発生するものであり、入力されたデータ量 (入力されている行数) に依存します。 ただし、Excel が 1 ページに含むことの可能な行数はワークシートに設定されているフォントやプリンタ ドライバの情報を元に計算して決定されるため、現象が発生するデータ量は変化することに注意してください。関連情報
Location プロパティの詳細についてはオンライン ヘルプに記載があります。
[ヘルプ] メニューの [Microsoft Excel ヘルプ] をクリックし、"Microsoft Excel Visual Basic リファレンス" の "Visual Basic リファレンス" を選択して [表示] ボタンをクリックします。 [キーワード] タブを選択して "Location" と入力し、Location プロパティのトピックを参照してください。この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 210663 (最終更新日 2002-05-13) をもとに作成したものです。