- ベストアンサー
エクセルのマクロでシートの非表示と特定のシートのみ印刷する方法について
- エクセルのマクロによるシートの非表示や特定のシートのみ印刷する方法について詳しく教えてください。
- 指定したシートを非表示にするには、WorksheetsオブジェクトのVisibleプロパティをFalseに設定します。
- また、特定のシートのみ印刷するには、ActiveWindowオブジェクトのSelectedSheetsプロパティを使用して、印刷したいシートを選択し、PrintOutメソッドを実行します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Sheet1は印刷する必要があると思って回答していました。 補足を見ると、Sheet1の表示、非表示にかかわらずSheet1は印刷の必要はないようなので簡単にしました。 補足がSheet2だけのことなのか分かりませんので Select Case の中で印刷範囲の設定、印刷、印刷範囲の解除をしています。 Sub 印刷test() Dim ws As Worksheet 'ワークシート For Each ws In Worksheets '全てのシートを調べる With ws Select Case .Name Case "Sheet2" .PageSetup.PrintArea = "A1:AB42" .PrintPreview .PageSetup.PrintArea = "" Case "Sheet3" .PrintPreview Case "Sheet4" .PrintPreview End Select End With Next End Sub 蛇足ですが・・・・・・ Sheet2、Sheet3、Sheet4のみを印刷したいなら直接的に書いたほうが分かりやすいかもしれません。(下記) また、PrintAreaの指定が固定であれば、シート上(印刷範囲の設定)で設定しておけばマクロの中で設定する必要はありません。 印刷範囲が変動する場合はマクロの中で自動的に設定したりします。マクロの実行のたびに印刷範囲を変更するとマクロの意味がなくなってしまいます。 1つのシートの印刷範囲を1種類にしておけば、そのシートの余白などの細かい印刷設定をシート上(プレビュー)で行えば、マクロ側ではほとんど設定する必要はありません。(今回はExcel2000です。同じでしょう) Sub 印刷test2() With Worksheets("Sheet2") .PageSetup.PrintArea = "A1:AB42" .PrintPreview .PageSetup.PrintArea = "" End With With Worksheets("Sheet3") .PrintPreview End With With Worksheets("Sheet4") .PrintPreview End With End Sub 最後に、マクロを記録した結果から不必要な箇所を除いたり、繰り返し処理、判定処理を組み込むようにすれば間違いが減り、分かりやすく短くなり、上達すると思います。
その他の回答 (4)
- nishi6
- ベストアンサー率67% (869/1280)
少し書き換えてみました。コメントを見てもらえば行っていることは分かると思います。 Excel97で動作確認しました。ご参考に。 Sub 印刷test() Dim ws As Worksheet 'ワークシート Dim PrintFlg As Boolean '印刷するかの判定 On Error GoTo ErrorHandler 'エラー対応(非表示シート対応) For Each ws In Worksheets '全てのシートを調べる Select Case ws.Name '印刷したいシートは PrintFlg を True にする Case "Sheet1": PrintFlg = True Case "Sheet2": PrintFlg = True Case "Sheet3": PrintFlg = True Case "Sheet4": PrintFlg = True '上以外のシート名なら PrintFlg は False Case Else: PrintFlg = False End Select If PrintFlg = True Then ws.PrintPreview '今はプレビュー。PrintOutで印刷 Next Exit Sub '終わり ErrorHandler: 'シートが非表示の場合 If Err = 1004 Then ws.Visible = True '表示する ws.PrintPreview '今はプレビュー。PrintOutで印刷 ws.Visible = False '非表示に戻す End If Resume Next '次の処理 End Sub
補足
もうひとつ、教えてください。よろしくお願いします。 --------------------------------------------------------------------- Sub 印刷test() Dim ws As Worksheet 'ワークシート Dim PrintFlg As Boolean '印刷するかの判定 On Error GoTo ErrorHandler 'エラー対応(非表示シート対応) For Each ws In Worksheets '全てのシートを調べる Select Case ws.Name '印刷したいシートは PrintFlg を True にする Case "Sheet2": PrintFlg = True Case "Sheet3": PrintFlg = True Case "Sheet4": PrintFlg = True '上以外のシート名なら PrintFlg は False Case Else: PrintFlg = False End Select If PrintFlg = True Then ws.PrintPreview '今はプレビュー。PrintOutで印刷 Next Exit Sub '終わり ErrorHandler: 'シートが非表示の場合 If Err = 1004 Then ws.Visible = True '表示する ws.PrintPreview '今はプレビュー。PrintOutで印刷 ws.Visible = False '非表示に戻す End If Resume Next '次の処理 End Sub ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 上記のマクロに下記のマクロを書き込みたいのですが教えてください ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sub printappointedrange() Worksheets("Sheet2").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- masakin
- ベストアンサー率59% (32/54)
#2以外の方法です On Error Resume Next Sheets("sheet1").PrintOut Copies:=1 Sheets("sheet2").PrintOut Copies:=1 Sheets("sheet3").PrintOut Copies:=1 Sheets("sheet4").PrintOut Copies:=1 という方法です。 On Error Resume Nextでエラーとなっても強制的に次のステートメントを実行します。 あまり勧めれませんが・・・
- masakin
- ベストアンサー率59% (32/54)
2.への回答です If Worksheets("sheet1").Visible = True Then Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If If Worksheets("sheet2").Visible = True Then Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If : こんな感じでしょうか?
- madman
- ベストアンサー率24% (612/2465)
1) ActiveWindow.SelectedSheets.PrintOut Copies:=1 ←これを消せば良いです。 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets().selectで、それぞれのシートをアクティブにして、 Active…でアクティブなシートを印刷してますので、最初のシート5の状態で印刷している部分が不要でしょう。 2) 非表示なのでシートを選択できないのが原因ではないでしょうか。 ちょっと回避策はすぐには浮かばないです。
お礼
いろいろ教えていただきまして、ありがとうございました。 VBAを始めて、1週間がたちましたが、詳しく教えていただいたので VBAの作成の方法がだいぶわかりました。本を読んでやっていたときは さっぱりわかりませんでしたが、親切に教えていただいたおかげで助かりました また、何か質問をする事がありかもわかりませんが、そのときはよろしくお願いします。