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

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

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

VBAの初心者です。詳しく教えてください。 1.下記のVBAでシートを非表示にしたときに実行時エラー1004が出るのですが  どうしたらよいのですか。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub printappointedrange() Worksheets("シート1").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.シートに印刷ボタン作成して、印刷はできるのですが、印刷する前にプリンターの設定を変更する方法は無いのですか。

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

  • ベストアンサー
  • 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

  • 印刷範囲を設定するvbaコード

    エクセルシートの印刷範囲を設定するvbaコードで Sub Macro1() With ActiveSheet.PageSetup .PrintArea = "$A$1:$c$10" End With End Sub としてるのですが、 "$A$1:$c$10"の部分を Range(Cells(1, 1), Cells(10,3)) 形式でやりたいのですが、 うまくできません。 Sub Macro1() With ActiveSheet.PageSetup .PrintArea = Range(Cells(1, 1), Cells(10,3)) End With End Sub としても、全部が印刷範囲として選択されてしまいます。 というか、印刷範囲が設定されません。

  • エクセルVBA印刷範囲指定とヘッダーフッター

    1か月のうちの前期と後期のシートがそれぞれあり、前期シートを範囲指定して領収書の一部を印刷したいのですがなぜか、前に作ったヘッダーとフッターが前期だけ印刷されてしまいます。 どこに隠れているのか謎なのです。前に悩みながら作ったシートがどこかに隠れているのでしょうか? また、同じ様式のシートなのですが前期は80%にしなくてもなぜか一枚に収まります。 不思議でなりません・・・全部消したはずなのですが Sub 印刷範囲設定領収書前期() With Worksheets("領収前期") .PageSetup.PrintArea = "G1:BB91" .PrintPreview End With End Sub Sub 印刷範囲設定領収書後期() With Worksheets("領収後期") .PageSetup.Zoom = 80 .PageSetup.PrintArea = "G1:BB91" .PrintPreview End With End Sub

  • Excel2003 VBAで印刷 セル指定

    よろしくお願いします。 ボタン5をクリックしてある範囲を印刷したいのですが、私が知っているものはセル指定でActiveSheet.PageSetup.PrintArea = Range("A90:K130") であれが印刷可能なのですが最後の行までにしたいのですがどうしてもうまくいきません。 ActiveSheet.PageSetup.PrintArea = Range(Cells(90, 1), Cells(r, 11)) それと同時に11列全部(文字は小さくてもいいのですが)一枚に印刷したのですが よろしくお願いします。 Private Sub CommandButton5_Click() res = MsgBox("決済記録を印刷します", vbYesNo + vbQuestion) If res = vbYes Then r = Range("A65536").End(xlUp).Row + 1 'Range(Cells(90,1),Cells(r,11)) '印刷したい範囲 ActiveSheet.PageSetup.PrintArea = Range("A90:K130") ActiveSheet.PrintOut preview:=True End If End Sub

  • エクセル2007 縦長と横長の混在で両面印刷

    現在,相対記録で作成したマクロを使っています。 Sub 予定表印刷() ActiveCell.Range("A1:I53").Select ActiveSheet.PageSetup.PrintArea = Selection.Address ActiveSheet.PageSetup.Orientation = xlPortrait ActiveSheet.PrintOut End Sub このあとに,横長で$T$2から$AX$32を絶対番地で印刷し, かつ両面印刷にしたいのですが,うまくいきません。 縦長と横長の混在はできないのでしょうか。 それとも,印刷範囲が離れているのがいけないのでしょうか。 もしかして,相対指定と絶対指定の混在がいけないのでしょうか・・・。

  • ブックの中の1枚だけ選んで印刷したい

    win7とExcel2007でマクロ作成中の初心者です。 以下、ファイルの中の複数シートを印刷できました。 Private Sub 請求書印刷_Click() Application.ScreenUpdating = False Unload Me 請求書の印刷100 '請求書印刷 Worksheets(1).Select ActiveWindow.DisplayHorizontalScrollBar = False End Sub Sub 請求書の印刷100() ' Dim i As Integer For i = 1 To Worksheets.Count - 8 With Worksheets(i) If .Range("F11").Value <> 0 Then .PageSetup.PrintArea = "$B$1:$U$44" .PrintOut End If End With Next i Worksheets(1).Activate End Sub ------------------------------------ 今度は、同一のファイルから、指定の単一のシートを印刷したいので 以下のコードを実行すると、 Private Sub 単数印刷_Click()' Application.ScreenUpdating = False Unload Me Unload G印刷 Dim i As Integer With 名簿リスト2 For i = 0 To .ListCount - 1 If .Selected(i) Then 請求書の印刷範囲200 ' Worksheets(.list(.ListIndex)).PrintPreview Worksheets(Split(.list(.ListIndex - 0), " ")(1)).PrintPreview ' End If Next i End With ActiveWindow.DisplayHorizontalScrollBar = False GH印刷.Show End Sub Sub 請求書の印刷範囲200() ' ActiveSheet.Unprotect Dim i As Integer For i = 1 To Worksheets.Count - 8 With Worksheets(i) .PageSetup.PrintArea = False '印刷範囲のクリア If .Range("F11").Value <> 0 Then .PageSetup.PrintArea = "$B$1:$T$44" End If End With Next i Worksheets(1).Activate End Sub 以下の行が黄色くなりマクロがエラーとなり停止します。 エラーは 実行時エラー9 インデックスが有効範囲にありません となります。 Worksheets(Split(.list(.ListIndex - 0), " ")(1)).PrintPreview ' これと同様のファイルで試すと何なく1枚だけ印刷できました。 このエラーの原因はなんでしょうか?解決方法を教えてください。

  • 複数シートをVBAで印刷

    エクセル2010VBAを使って仕事の効率化を勉強中です。 歳入日計表のシート31日分を作り、歳入月計表として合計をまとめていますが 日々印刷範囲を決めて一日分のシート印刷するのをVBA処理したいのですが できません。 1日分はこんな感じでできるのですが・・・ 31日分をどのように処理すれば日々印刷可能になるのでしょうか? お願いいたします! Sub 日計表印刷設定() With Worksheets("1") .PageSetup.PrintArea = "A2:G71" .PageSetup.LeftMargin = 55 .PageSetup.TopMargin = 40 .PageSetup.Zoom = 80 .PrintPreview End With 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で試みても再現されました。 他の部分は完成したつもりなのに、印刷が出来ず困っております。 アドバイスお願いします。

  • エクセルの印刷範囲をマクロで決めたいです。

    以前こちらで、選択範囲を印刷範囲にする方法を教えていただきました。 選択範囲は別の項目で決定されています。 With Selection Vert = .Rows.Count Side = .Columns.Count Print_range = .Cells(1, 1).Address & ":" & .Cells(Vert, Side).Address End With With ActiveSheet.PageSetup .PrintArea = Print_range .PaperSize = xlPaperA3 .Orientation = xlPortrait End With 以上の記述で無事選択範囲が印刷範囲になりました。 次に、選択範囲が何種類かのパターンに絞れる事がわかったので パターンごとに拡大縮小印刷の%も決定しようと Select Case True Case Masu = 10 ActiveSheet.PageSetup.Zoom = 100 Case Masu = 11 ActiveSheet.PageSetup.Zoom = 115 Case Masu = 12 ActiveSheet.PageSetup.Zoom = 123 Case Else ActiveSheet.PageSetup.Zoom = 100 End Select を追加したところエラーになります。 何がよくないのかさえわかりません。 よい解決策はないものでしょうか?

  • VBAで印刷する前にプリンターの設定を変更する方法

    ○シート1の印刷ボタンで印刷するとシート1及びシート2が印刷されます。  シート2だけを印刷するには、どうしたらよいのですか。   ○現状  ・シート2は非表示  ・シート1に印刷ボタン(下記のVBAをマクロ登録済) ---------------------------------------------------------------------- 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 --------------------------------------------------------------------

  • Excelマクロで印刷範囲の指定をしたい

    Excelで一覧表を作成し、 『印刷A3』と『印刷A4』というボタンを作り、 それぞれ印刷範囲が異なるようにマクロを組みたいと思い、『印刷A3』の場合は下記のマクロで問題ありませんでした。 【印刷A3】 ------------------------------------------------- Sub 印刷A3_Click() Worksheets(7).PageSetup.PrintArea = _ Range("A6").CurrentRegion.Address With Worksheets(7).PageSetup .Orientation = xlLandscape .PaperSize = xlPaperA3 .Zoom = 63 End With Worksheets(7).PrintOut Preview:=True End Sub ------------------------------------------------- セルA6以降の入力されているセルを選択できるのですが、『印刷A4』の場合は、列の範囲を23列までとし、23列目以降は印刷範囲外としたいです。 (列は最大で33列まであります) 行は『印刷A3』と同じように、入力されている全てのセルを範囲としたいです。 マクロ初心者のため、教えていただけると助かります。 よろしくお願い致します。

専門家に質問してみよう