• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAの範囲印刷設定を修正したいのですが)

VBAの範囲印刷設定を修正したい

このQ&Aのポイント
  • VBAを使用してシートの印刷範囲を設定しようとすると、実行時エラー1004が発生します。解決方法を教えてください。
  • シートに印刷ボタンを作成しましたが、印刷する前にプリンターの設定を変更する方法はありますか?
  • VBA初心者ですが、範囲印刷の設定の修正方法について詳しく教えてください。

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

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

シート2の表示、非表示にかかわらず、印刷を行います。 簡単にしてあります。 Sub printappointedrange()   Dim ws As Worksheet 'ワークシート   Set ws = Worksheets("シート2")   Dim ws2visible As Boolean 'シート2の表示条件   Application.ScreenUpdating = False '画面更新ストップ   ws2visible = ws.Visible     'シート2が非表示なら表示する     If ws2visible = False Then       ws.Visible = True     End If   ws.Activate   ws.PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定   Application.Dialogs(xlDialogPrint).Show 'プリンタ設定   'シート2の表示を戻す   If ws2visible = False Then     ws.Visible = False   End If   Worksheets("シート1").Activate   Application.ScreenUpdating = True '画面更新 End Sub

m-happy-t
質問者

お礼

いろいろ、教えていただきありがとうございます。 本に記載されている、マクロの記述と回答を頂いた記述が違ったので、悩みましたが、本より回答を頂いたほうが、よく分かりました。

その他の回答 (2)

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

質問の『印刷する前にプリンターの設定を変更する方法』の意味がよくわからなかったので、 xlDialogPrintとxlDialogPrinterSetupを回答したのですが、補足では、『xlDialogPrint』が使ってあり、 このままでは、 1.『xlDialogPrint』のダイアログでOKボタンを押したためにボタンがあるシート1を印刷 2.マクロの『.PrintOut』でシート2の印刷 となって、シート1、シート2が印刷されるはずです。 A.『プリンターの設定』が印刷書式の設定なら『xlDialogPageSetup』を B.『プリンターの設定』がプリンタの切替等なら『xlDialogPrinterSetup』を使用します。 C.『印刷』のダイアログをだすのなら『xlDialogPrint』ですが、このままだとシート1も印刷してしまいます。 『印刷する前にプリンターの設定を変更する方法』がCの場合は補足してください。

m-happy-t
質問者

補足

申し訳ありませが、『印刷する前にプリンターの設定を変更する方法』Cの場合を教えてもらえますか。 よろしくお願いします。

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

中に書き込んでみました。 非表示なら表示して印刷後非表示に戻しています。 非表示でも印刷しています。(質問でここが一番分からない。非表示なら印刷する?しない?) プリンタの設定は『'』をはずして確認して下さい。 Sub printappointedrange()   Dim Sheet1Visible As Boolean 'Sheet1のマクロ実行時のVisibleの設定   'プリンタの設定→どちらのことでしょうか。『'』をはずして試して下さい。   'Application.Dialogs(xlDialogPrint).Show   'Application.Dialogs(xlDialogPrinterSetup).Show   Sheet1Visible = Worksheets("シート1").Visible   Application.ScreenUpdating = False '画面更新をストップ   If Sheet1Visible = False Then     '非表示ならSheet1を表示する     '非表示の場合印刷しないなら Exit Sub を書く     Worksheets("シート1").Visible = True   End If   '/// ここまで追記 ///   Worksheets("シート1").Activate   '/// このマクロがどのコードウインドウにあるか分からないので ActiveSheet. を追加 ///   ActiveSheet.Range("A1:AB42").Select 'セル範囲の選択   With ActiveSheet     .PageSetup.PrintArea = Selection.Address '印刷範囲の指定     .PrintPreview '印刷     .PageSetup.PrintArea = False '印刷範囲のクリア   End With   '/// 以下を追記 ///   '元に戻す   Worksheets("シート1").Visible = Sheet1Visible   Application.ScreenUpdating = True '画面更新を戻す End Sub

m-happy-t
質問者

補足

質問の仕方が悪かったので、すみませんが、もう少し教えてください。 ○状況 ・現在シート2を非表示にしてあります。 ・シート1に印刷ボタンがあります。(ボタンをマクロ登録しています・・・下記 VBAです。) ・下記のVBAで「プリンタ設定、画面更新ストップ」を追加したときに、シート1及 びシート2(選択範囲のみ)が印刷されます。 ○質問 ・シート1及びシート2が印刷されるので、シート1を印刷しないようにし、シート2を印刷したいのです。 ・プリンタの種類によっては、プリンタ設定を2回聞いてきます。(シート1とシ ート2が印刷されるからですか) ○その他 ・下記のVBAは回答を頂いたのを、私なりに修正しました。 ・下記のVBAで「プリンタ設定、画面更新ストップ」を記述しない場合はシート2し か印刷されませんでした。 --------------------------------------------------------------------- Sub printappointedrange() Dim ws As Worksheet 'ワークシート Dim PrintFlg As Boolean '印刷するかの判定 On Error GoTo ErrorHandler 'エラー対応(非表示シート対応) Application.Dialogs(xlDialogPrint).Show 'プリンタ設定 Application.ScreenUpdating = False '画面更新ストップ For Each ws In Worksheets '全てのシートを調べる With ws Select Case .Name Case "シート2" .PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = "" '印刷範囲クリア End Select End With Next Exit Sub '終わり ErrorHandler: 'シートが非表示の場合 If Err = 1004 Then ws.Visible = True '表示する ws.PrintOut ws.Visible = False '非表示に戻す End If Resume Next '次の処理 End Sub ---------------------------------------------------------------------

関連するQ&A