dポイントプレゼントキャンペーン実施中!

Excel2010のVBAで新たに作成した分のシートだけを印刷する処理を書いているのですが、
印刷(printOut)の所で次のエラーが出てしまいます。
【オブジェクト変数またはWithブロック変数が設定されていません。】
解決策をご教授願います。よろしくお願いします。


Dim firstSheetsMaisu As Integer '最初のシート枚数
Dim sheets As Worksheet
Dim sheetIndexArray() As Integer   '配列
Dim hairetuSu As Integer        '要素数

firstSheetsMaisu = 4 '最初のシート枚数を4に設定
sheetsMaisu = Worksheets.count '新たに作成した分を含めた現在のシート枚数


Application.DisplayAlerts = False
 '最初のシート分を除いた作成したシート文を配列に格納します。
For i = sheetsMaisu To firstSheetsMaisu + 1 Step -1
Worksheets(i).Activate
ActiveSheet.PageSetup.PaperSize = xlPaperA4

ReDim Preserve sheetIndexArray(hairetuSu)
sheetIndexArray(hairetuSu) = i
hairetuSu = hairetuSu + 1
Next

  sheets(sheetIndexArray).printOut  '←ここでエラーが発生します。
sheets("入力項目").Select
Application.DisplayAlerts = True

A 回答 (1件)

>Dim sheets As Worksheet


この行削除してください。
Sheetsプロパティと同じ名前で変数宣言してはいけません。

'sheets(sheetIndexArray).printOut  '←ここでエラーが発生します。
ここは変数ではなくてSheetsコレクションのつもりで書かれていますよね。
変数宣言されているものだからオブジェクト変数だと解釈されてしまって
提示のエラーが出ます。


以下余談ですが
Loop前に対象Sheet数が判るのですから、
For..Nextステートメントの前に
ReDim sheetIndexArray(sheetsMaisu - firstSheetsMaisu - 1)
1回だけ設定すれば ReDim Preserve 不要です。
    • good
    • 0

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