Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4667 / 13644 ツリー ←次へ | 前へ→

【55324】HPageBreaks について maru 08/4/27(日) 22:06 質問[未読]
【55325】Re:HPageBreaks について ponpon 08/4/28(月) 1:29 発言[未読]
【55330】Re:HPageBreaks について maru 08/4/28(月) 15:24 お礼[未読]

【55324】HPageBreaks について
質問  maru E-MAIL  - 08/4/27(日) 22:06 -

引用なし
パスワード
   初歩的な質問で恥ずかしく思いますが、どなたかご教授頂ければ幸いです。
宜しくお願いします。

実行時に3ページ目で「実行時エラー'9' インデックスが有効範囲にありません。」の
エラーが発生します。実際の範囲は8ページです。
Sub test()

  Dim my_Hpb As Integer
  Dim my_Row As Integer
  Dim i As Integer
  
  my_Hpb = ActiveSheet.HPageBreaks.Count
  
  For i = 1 To my_Hpb - 1
    my_Row = ActiveSheet.HPageBreaks(i).Location.Row
    Range("A" & my_Row) = 1
  Next

End Sub

【55325】Re:HPageBreaks について
発言  ponpon  - 08/4/28(月) 1:29 -

引用なし
パスワード
   ▼maru さん:
>初歩的な質問で恥ずかしく思いますが、どなたかご教授頂ければ幸いです。
>宜しくお願いします。
>
>実行時に3ページ目で「実行時エラー'9' インデックスが有効範囲にありません。」の
>エラーが発生します。実際の範囲は8ページです。

これかな?

2003でも発生しました。
ht tp://support.microsoft.com/kb/210663/ja

回避策
コードで垂直方向または水平方向改ページの Location プロパティを使用する前に、ワークシートの最後のセルを選択するコードを追加します。
例えば、次のコードを使用して、最後のセルを選択し、Location プロパティを使用してから、最初のアクティブ セルを再度選択します。


いろいろ試しましたが、全部↑のようになりました。

Sub test2()
  Dim my_Hpb As Variant
  Dim my_Row As Long
  Dim i As Long
 
  i = 1
  With ActiveSheet
    .DisplayAutomaticPageBreaks = True
    For Each my_Hpb In .HPageBreaks
      If my_Hpb.Extent = xlPageBreakFull Then
       my_Row = my_Hpb.Location.Row
       .Range("A" & my_Row) = i
       i = i + 1
      End If
    Next
  End With
End Sub


Sub test3()

  Dim my_Hpb As Long
  Dim my_Row As Long
  Dim i As Long
  
  With ActiveSheet
    .DisplayAutomaticPageBreaks = True
    my_Hpb = .HPageBreaks.Count
 
    For i = 1 To my_Hpb
      my_Row = ActiveSheet.HPageBreaks(i).Location.Row
      .Range("A" & my_Row) = i
    Next
  End With
End Sub

Sub test()

  Dim my_Hpb As Integer
  Dim my_Row As Integer
  Dim i As Integer
 
  my_Hpb = ActiveSheet.HPageBreaks.Count
 
  For i = 1 To my_Hpb - 1
    my_Row = ActiveSheet.HPageBreaks(i).Location.Row
    ActiveSheet.Range("A" & my_Row) = 1
  Next

End Sub
Sub test4()
  Dim hpbcnt As Long
  Dim 改ページ行 As Long
  Dim 改ページ列 As Long
  Dim 改ページ行列 As Variant
  
  With ActiveSheet
  hpbcnt = .HPageBreaks.Count
  For i = 1 To hpbcnt
    改ページ行 = ActiveSheet.HPageBreaks(i).Location.Row
    改ページ列 = ActiveSheet.HPageBreaks(i).Location.Column
    改ページ行列 = ActiveSheet.HPageBreaks(i).Location.Address
    Range(改ページ行列).Interior.ColorIndex = 3
  Next
  End With
End Sub

【55330】Re:HPageBreaks について
お礼  maru E-MAIL  - 08/4/28(月) 15:24 -

引用なし
パスワード
   ▼ponpon さん:
>▼maru さん:
>>初歩的な質問で恥ずかしく思いますが、どなたかご教授頂ければ幸いです。
>>宜しくお願いします。
>>
>>実行時に3ページ目で「実行時エラー'9' インデックスが有効範囲にありません。」の
>>エラーが発生します。実際の範囲は8ページです。
>
>これかな?
>
>2003でも発生しました。
>ht tp://support.microsoft.com/kb/210663/ja
>
>回避策
>コードで垂直方向または水平方向改ページの Location プロパティを使用する前に、ワークシートの最後のセルを選択するコードを追加します。
>例えば、次のコードを使用して、最後のセルを選択し、Location プロパティを使用してから、最初のアクティブ セルを再度選択します。
>
>
>いろいろ試しましたが、全部↑のようになりました。
>
>Sub test2()
>  Dim my_Hpb As Variant
>  Dim my_Row As Long
>  Dim i As Long
> 
>  i = 1
>  With ActiveSheet
>    .DisplayAutomaticPageBreaks = True
>    For Each my_Hpb In .HPageBreaks
>      If my_Hpb.Extent = xlPageBreakFull Then
>       my_Row = my_Hpb.Location.Row
>       .Range("A" & my_Row) = i
>       i = i + 1
>      End If
>    Next
>  End With
>End Sub
>
>
>Sub test3()
>
>  Dim my_Hpb As Long
>  Dim my_Row As Long
>  Dim i As Long
>  
>  With ActiveSheet
>    .DisplayAutomaticPageBreaks = True
>    my_Hpb = .HPageBreaks.Count
> 
>    For i = 1 To my_Hpb
>      my_Row = ActiveSheet.HPageBreaks(i).Location.Row
>      .Range("A" & my_Row) = i
>    Next
>  End With
>End Sub
>
>Sub test()
>
>  Dim my_Hpb As Integer
>  Dim my_Row As Integer
>  Dim i As Integer
> 
>  my_Hpb = ActiveSheet.HPageBreaks.Count
> 
>  For i = 1 To my_Hpb - 1
>    my_Row = ActiveSheet.HPageBreaks(i).Location.Row
>    ActiveSheet.Range("A" & my_Row) = 1
>  Next
>
>End Sub
>Sub test4()
>  Dim hpbcnt As Long
>  Dim 改ページ行 As Long
>  Dim 改ページ列 As Long
>  Dim 改ページ行列 As Variant
>  
>  With ActiveSheet
>  hpbcnt = .HPageBreaks.Count
>  For i = 1 To hpbcnt
>    改ページ行 = ActiveSheet.HPageBreaks(i).Location.Row
>    改ページ列 = ActiveSheet.HPageBreaks(i).Location.Column
>    改ページ行列 = ActiveSheet.HPageBreaks(i).Location.Address
>    Range(改ページ行列).Interior.ColorIndex = 3
>  Next
>  End With
>End Sub

有り難うございました。参考にさせていただきます。
また、機会がありましたら宜しくお願いします。

4667 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free