質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2058閲覧

VBAでの印刷設定について

porpora_0316

総合スコア37

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/05/15 04:44

編集2019/05/15 05:49

VBAで印刷の設定を【作業中のブックを印刷】から【ブック全体を印刷】に変更したいです。
調べてはみましたが、印刷を前提にしているコードが大変多く、こちらに質問させていただいた次第です。
下記のコードは、1行目のタイトルと最初の行以外のページを作成するものです。
何行あるか取得→シート2をコピー→一部変更までの流れは確認したところ出来ています。
一応、各シートを1ページとして印刷することもできていますが、このまま印刷ボタンを手動で押すとアクティブなシートのみが印刷されています。

理想としては、印刷ボタンさえ押せばすべてのシートが印刷される状態になるのを想定しています。
印刷はせずに設定変更だけする良い方法はありますか?
もし不可能なのであれば不可能だと言っていただきたいです。

vba

1Sub シート作成() 2Dim num As Integer 3Dim i As Integer 4 5Application.ScreenUpdating = False 6Application.DisplayAlerts = False 7num = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row 8 9With Sheets(1).PageSetup 10 .Zoom = False 11 .FitToPagesWide = 1 12 .FitToPagesTall = 1 13End With 14 15With Sheets(2).PageSetup 16 .Zoom = False 17 .FitToPagesWide = 1 18 .FitToPagesTall = 1 19End With 20 21For i = 3 To num 22Worksheets("Sheet2").Copy after:=Worksheets(Worksheets.Count) 23ActiveSheet.Name = "Sheet" & i 24 25ActiveSheet.Range("B4:B11").NumberFormatLocal = "G/標準" 26ActiveSheet.Range("B4") = Sheets("Sheet1").Range("B" & i) & " ご担当者様" 27ActiveSheet.Range("B4").Font.Size = 20 28ActiveSheet.Range("B6") = "=Sheet1!A" & i 29ActiveSheet.Range("B9") = "=Sheet1!C" & i 30ActiveSheet.Range("B11") = "=Sheet1!D" & i 31Range("B4:B11").Font.FontStyle = "太字" 32 33Next 34 35Application.DisplayAlerts = True 36Application.ScreenUpdating = True 37End Sub 38

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

私もよくわかってないのですみませんが、印刷をPrinOutメソッドを使って行っていらっしゃるものと仮定しまして・・・

ヘルプやオブジェクトブラウザで見てみましたら、PrinOutメソッドは・・・、

親オブジェクトが
・Worksheet
のものもあれば、
・Workbook
のものもありました。

なので、例えばですが(ご希望のかたちになるかはわかりませんが)、「ActiveWorkbook.PrintOut」で印刷してみてはいかがでしょうか?
この場合、ワークシートだけでなくグラフシートも多分印刷されてしまうと思いますが・・・。

オブジェクトブラウザで調べてみましたら、PrinOutメソッドはそのほか
・Chartオブジェクト(グラフシート)
・Chartsコレクション(グラフシートたち)
・Rangeオブジェクト(多分ですが、「選択された範囲」とかいうヤツでは?)
・Sheetsコレクション(グラフシートやワークシートたち)
・Worksheetsコレクション(ワークシートたち)
も保持・保有・内包していました。

なので、
ActiveWorkbook.Sheets.PrintOut (ワークシートもグラフシートも)
ActiveWorkbook.WorkSheets.PrintOut (ワークシートたちのみ)
でも、すべてのワークシートが印刷されると思います。

いちおうこちらのテストでは
ActiveWorkbook.PrintOut
ActiveWorkbook.WorkSheets.PrintOut
ActiveWorkbook.Sheets.PrintOut
と(引数なしで)書くだけで、すべてのワークシートの一括印刷が一応はできました。
イミディエイトウィンドウからも実行できました。

「メソッド」は、同じ名前のものでも、親オブジェクト異なるものが結構ありますので、オブジェクトブラウザの「完全一致」で調べるといいと思います。
「今自分が扱っている親オブジェクトと別の親オブジェクトが無いか?」を調べるのに役立ちます。
Open、Add、Copy、などのメソッドも同様に、名前は同じでも親オブジェクトが異なるケースがたくさんあります。
ご参考程度に、一度、オブジェクトブラウザでメソッドを色々と検索してみるとよいと思います。

質問者様のご質問と関係のない話でしたら無視してお許しください。
すみません。

投稿2019/05/17 01:48

komugi3333

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

komugi3333

2019/05/17 01:52

「印刷はせずに設定変更だけする良い方法はありますか?」 ということでしたね。 意味のない回答をしてしまい、本当に申し訳ございませんでした。
porpora_0316

2019/05/20 04:33

いえ、ありがとうございました。 もしもそのような機能を付ける場合になったらこちらのご回答を参考にさせていただきます。
guest

0

ベストアンサー

はっきりとできませんと断言はできませんが、少し調べてみた感じ見当たらず、自分でボタンを作った方が早そうに感じました。

ボタンフォームで印刷ボタンを作って、ボタンフォーム押下→全シート印刷するマクロ実行 とするのはいかがでしょうか。

投稿2019/05/16 14:37

Akashic

総合スコア298

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torisan

2019/05/17 01:51

『ファイル』⇒『オプション』⇒『クイックアクセスツールバー』から、  マクロそのものをツールバーに登録して見た目的には変わらないようにも出来ます。 ただし当然、すべてのエクセルを開いた場合に適用されるので、運用と相談する必要はありますが。
guest

0

どうやら印刷せずに設定変更するのは不可能の様です。諦めることにしました。
ご回答、ありがとうございました。とりあえず最初に回答してくださった方をベストアンサーにさせていただきます。

投稿2019/05/20 04:35

porpora_0316

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問