エクセルのマクロでシートの非表示と特定のシートのみ印刷する方法について

このQ&Aのポイント
  • エクセルのマクロによるシートの非表示や特定のシートのみ印刷する方法について詳しく教えてください。
  • 指定したシートを非表示にするには、WorksheetsオブジェクトのVisibleプロパティをFalseに設定します。
  • また、特定のシートのみ印刷するには、ActiveWindowオブジェクトのSelectedSheetsプロパティを使用して、印刷したいシートを選択し、PrintOutメソッドを実行します。
回答を見る
  • ベストアンサー

エクセルのマクロの記述について

VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() 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 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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 最後に、マクロを記録した結果から不必要な箇所を除いたり、繰り返し処理、判定処理を組み込むようにすれば間違いが減り、分かりやすく短くなり、上達すると思います。

m-happy-t
質問者

お礼

いろいろ教えていただきまして、ありがとうございました。 VBAを始めて、1週間がたちましたが、詳しく教えていただいたので VBAの作成の方法がだいぶわかりました。本を読んでやっていたときは さっぱりわかりませんでしたが、親切に教えていただいたおかげで助かりました また、何か質問をする事がありかもわかりませんが、そのときはよろしくお願いします。

その他の回答 (4)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

少し書き換えてみました。コメントを見てもらえば行っていることは分かると思います。 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

m-happy-t
質問者

補足

もうひとつ、教えてください。よろしくお願いします。 --------------------------------------------------------------------- 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)
回答No.3

#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)
回答No.2

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)
回答No.1

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) 非表示なのでシートを選択できないのが原因ではないでしょうか。 ちょっと回避策はすぐには浮かばないです。

関連するQ&A

  • マクロについて

    Sub FormShow() Qry.Show Private Sub CommandButton1_Click() Sheets("A").Select Sheets("B").Select Replace:=False Sheets("C").Select Replace:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Help").Select Sheets("A").Select End Sub のマクロが登録された「ボタン(フォームコントロール)」により実行した後に、 Bシート内のA1セルの中に"・"を検索し、 もし"・"があった場合は"WWW()"のマクロを実行、 "・"がなかった場合は"XXX()"のマクロを実行する。 これが中々上手くいかず困っております。 ご教授いただければ幸いです。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • 指定する曜日の時に特定のエクセルファイルを印刷

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルの各シートを自動印刷して保存するVBAです。 ボタンが設置されているシートのK1には「TODAY()」の式が入っています。これは当日の日付を自動で表記する様になっています。 質問ですがボタンを押すと毎日印刷シート+K1に記入されている日付の曜日のシートのみを印刷するVBAはどの様にすれば良いでしょうか? 例えば今日(2016年9月10日)で言うと土曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+土曜日印刷のみ出力されると言う事です。 明日(2016年9月11日)は日曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+日曜日印刷シートのみが出力される形です。 よろしくお願いします。

  • エクセル マクロの作り方

    はじめまして エクセルのマクロ初心者です。 ツール→マクロ→新しいマクロの記録にて 開いているシートをA1~V68まで(すべての範囲でもOKです)をコピーし、別の貼り付け用シートに貼付、3つのタブを印刷して閉じ、開いているシートを表示する。という内容のマクロを登録しました。 台紙で以上のマクロを登録し、台紙を複製しました。 マクロを実行すると複製されたシートのA1~V68までではなく、台紙のA1~V68までが印刷されて困っています。 どうすれば解決するでしょうか???詳しい方おしえてください。 尚、下記に記録されたものを載せておきますので、訂正部分など教えてもらえたら助かります。 (マクロの記録の上部を訂正すると良いような気はするのですが…。初心者なのもので範囲の指定の仕方がわるいのでしょうか???) よろしくお願いします。 Sub マクロ名() ' ' マクロ名 Macro ' マクロ記録日 : 2007/10/14 ユーザー名 : ??? ' ' Application.Run "hozon1.初期" Range("A1:V68").Select Selection.Copy ChDir "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿" Workbooks.Open Filename:= _ "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿\平日,日曜、祭日点呼簿.xls" Cells.Select ActiveSheet.Buttons.Add(509.25, 1.5, 72.75, 12.75).Select ActiveSheet.Paste Sheets("大型1").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("大型2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("小型1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.Close ActiveWindow.SmallScroll Down:=-51 Range("J3").Select End Sub

  • エクセル2000VBAからの印刷で実行時エラー1004発生

    エクセル2000のVBAマクロ中で印刷をしよう として、実行時エラー1004が発生し、原因が分からず 苦慮しています。 (前略) Sheets("ラベル印刷").Select ... ActiveSheet.PageSetup.PrintArea = "$A$1:$B$2" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True を実行すると、WorksheetクラスのPrintOutメソッドが 失敗しましたというエラーがでます。 色々試して、 Worksheets("ラベル印刷").Activate ActiveSheet.PrintOut とやってみたり、シートの名称をデフォルトのSheet1に 戻したりしても同様でした。 同じモジュール中で、 Sub printtest()   Worksheets("ラベル印刷").PrintOut End Sub というのを記述して、VBAエディター中で実行ボタン (▼)で実行したり、ワークシートのツール/マクロの 実行から実行すると問題なく印刷できます。 ところが、マクロを改造してこのサブルーチンをコールする ようにすると、上と同様の現象が出ます。 別のPCで試みても再現されました。 他の部分は完成したつもりなのに、印刷が出来ず困っております。 アドバイスお願いします。

  • エクセル マクロ 印刷指定

    マクロが解りません。色々調べてマクロの記録を使って、下記のマクロを作りました。 1枚目の印刷を2枚目、3枚目印刷として書き足してみました。 しかしエラーが出て2番目のシートからの印刷ができません。 Sub 連絡票印刷() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+p ' Sheets("連絡票").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("連絡票").Range("p1").Value, To:=Sheets("連絡票").Range("q1").Value, Collate:=True, IgnorePrintAreas:=False Sheets("予定表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("予定表").Range("y1").Value, To:=Sheets("予定表").Range("z2").Value, Collate:=True, IgnorePrintAreas:=False Sheets("配車表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("配車表").Range("s1").Value, To:=Sheets("配車表").Range("t2").Value, Collate:=True, IgnorePrintAreas:=False Dim str As String str = Worksheets("連絡票").Range("r1") Worksheets(str).Select End Sub いろいろ解らないなりに書き換えをしてみましたが、やっぱり2番目のシートから印刷ができません。 教えていただけませんでしょうか。

  • エクセルマクロ印刷時にプリンタを指定できますか?

    エクセル2002を使用しています。VBAはまったくわかりません。 マクロの自動登録で印刷を記録すると、通常使うプリンタから 出力されるようですが、LANでプリンタ複数使用可能な環境です ので、いちいち通常使うプリンタを変更するのではなく、マクロ 実行時にプリンタを選択したく思います。  因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー したSheet2を印刷するというマクロです。このマクロのどの部分に コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか? もしくはマクロではプリンタを選択できないのでしょうか? どうぞよろしくお願いいたします。 ****************************************************************** Sub 印刷() Sheets("Sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Sheet1").Select End Sub *******************************************************************

  • エクセでのプリンター選択・印刷・中止マクロについて

    エクセルでプリンターを選択して印刷するマクロを下記で行っているのですが、プリンター選択ダイアログボックスでプリント中止のキャンセルボタンをクリックしてもキャンセルが有効とならず印刷されてしまいます。マクロ初心者で、どうしたらいいのか困っています。ご教授宜しくお願い致します。 Sub ネットカード印刷()   Sheets("ネット入力").Select Application.Dialogs(xlDialogPrinterSetup).Show ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False Sheets("ネット入力").Select End Sub

  • エクセル マクロで教えてください

    下記のマクロがうまく働きません SUB印刷01は単独ではいくのですが、繰返しをするとプレビューの行で止まります。SHEETオブジェクトがおかしいというのですが私には分かりません宜しくお願いします Sub 印刷01() With ActiveSheet.PageSetup .PrintQuality = 600 .CenterHorizontally = True .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 47 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True End Sub Sub 印刷繰返し() Dim WS As Object For Each WS In Sheets WS.Activate Call 印刷01 Next End Sub

  • マクロで印刷ができません

    簡単な表を作成し、デザインモードでフォームコントロールでボタンを作成し、マクロの作成をしました。 印刷するためにボタンをクリックしても 印刷プレビューで画面が止まってしまいます。 ところがプレビュー画面を閉じると印刷が始まります。 何度やりかえてもマクロで最後まで印刷ができません。 記述は次のようになっています。 プリントも記述されているようなのですが・・・・ エクセル2007を使っています。 どなたか助けてください Sub ボタン3_Click() ' ' ボタン3_Click Macro ' ' ActiveSheet.Shapes("Button 3").Select Selection.Characters.Text = "ボタン 3" Range("B3:E12").Select ActiveSheet.PageSetup.PrintArea = "$B$3:$E$12" ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub

専門家に質問してみよう