何歳が一番楽しかった?

標記の件、御指導願います。

シート1:印刷設定(チェックボックスが印刷したいシート分あります)
シート2~34:チェックボックスがオンである表題のシートを選択し一括で印刷する。

を、VBAで作ってみましたが、エラー(インデックスが有効範囲にありません)が出てしまいます。

Sub CheckBoxPrint()

Dim ArrySheet() As String
Dim I As Long
Dim k As Long

k = 0

For I = 1 To 33

If ActiveSheet.OLEObjects("CheckBox" & I).Object.Value = True Then
ReDim Preserve ArrySheet(k)
ArrySheet(k) = ActiveSheet.DrawingObjects("CheckBox" & I).Object.Caption
k = k + 1
End If
Next I

ThisWorkbook.Worksheets(ArrySheet).PrintOut ←エラー(インデックスが有効範囲にありません)

Erase ArrySheet


End Sub
   
このエラーを回避する方法を御指導してください。
よろしくお願い致します。

A 回答 (2件)

エラーが出たからとすぐWEBなんぞに質問してませんか。


まず下記のように(確認用・・・の個所)でもして、自分がプログラムで設定した内容を確かめるクセを付けること。
Sub CheckBoxPrint()
Dim ArrySheet() As String
Dim I As Long
Dim k As Long
k = 0
For I = 1 To Sheets.Count - 1

If ActiveSheet.OLEObjects("CheckBox" & I).Object.Value = True Then
ReDim Preserve ArrySheet(k)
ArrySheet(k) = ActiveSheet.DrawingObjects("CheckBox" & I).Object.Caption
k = k + 1
End If
Next I
For Each cc In ArrySheet '<----確認用に入れてみる。こういうことをすることがデバッグで大切
MsgBox cc
Next
ThisWorkbook.Worksheets(ArrySheet).PrintOut '←エラー(インデックスが有効範囲にありません)
Erase ArrySheet
End Sub
上記のMsgbox no表示が質問者の思っている表示(シート名のはずだが)と正しいですか。
私は不自然だがチェックボックスのCaptionをSheetXXにそれぞれ変えて実行して、印刷は行われた。
ーー
わたしのテスト
Sheet1-Sheet4のシートとあり。
Sheet1に3つチェックボックスを貼り付け。2つだけON
ChechBox1のCaption-->Sheet2
ChechBox2のCaption-->Sheet3
ChechBox3のCaption-->Sheet4
このステップが行われていないか、Sheet名と食い違うのでは。
    • good
    • 0
この回答へのお礼

imogasi様

ご回答ありがとうございました。
ご指摘の通り、シート名に誤記がありました。
確認不足でした。。
今後はデバックしていくスキルも勉強します。

お礼日時:2011/04/28 11:50

とりあえず見た感じの範囲には間違いはありませんので,各チェックボックスのCaptionに誤記が無いか,正しくシート名を記入できているか,念入りに再確認してください。

    • good
    • 0
この回答へのお礼

keithin様

ご回答ありがとうございました。
ご指摘の通り、シート名に誤記がありました。
確認不足でした。。

お礼日時:2011/04/28 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報