こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAでのprintOut時にエラーが発生します。

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

投稿日時 - 2012-09-06 17:02:09

QNo.7683837

すぐに回答ほしいです

質問者が選んだベストアンサー

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

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


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

投稿日時 - 2012-09-06 21:42:18

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問