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

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

新規登録して質問してみよう
ただいま回答率
85.35%
印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1876閲覧

ユーザーフォームからの自動実行時と、VBA画面でのステップイン実行では挙動が違ってしまいます。

ats1

総合スコア0

印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/06/09 01:49

前提・実現したいこと

Excelで作った集計表を印刷するため、
データテーブルにフィルターを掛ける前後で別々の印刷設定をしています。
フィルター後用の設定は問題なく適用されているのですが、
フィルター解除状態用の設定(フィルター状態をリセットしたあとに、印刷設定を元に戻すための設定)では
ヘッダー設定が適用されていません。
フィルター後用の設定が生きたままになっていしまいます。

ところが、VBA画面でF8を押しながらステップ実行していくと
しっかりフィルター解除状態用の設定が適用されています。

こうなってしまう原因と、解決方法がわかりません。
とにかく、自動実行時にフィルター解除状態用の設定が適用されるようにしたいです。
(ヘッダーの設定を初期化したいです)

ご協力お願いします。

該当のソースコード

ExcelVBA

1Sub 印刷設定() 2 On Error Resume Next 3 ActiveSheet.PageSetup.LeftHeader = "" 4 Application.PrintCommunication = False 5 With ActiveWorkbook.ActiveSheet.PageSetup 6 .LeftMargin = Application.CentimetersToPoints(2) 7 .RightMargin = Application.CentimetersToPoints(2) 8 .TopMargin = Application.CentimetersToPoints(4) 9 .BottomMargin = Application.CentimetersToPoints(0) 10 .HeaderMargin = Application.CentimetersToPoints(2.5) 11 .FooterMargin = Application.CentimetersToPoints(0) 12 .PrintTitleRows = "$4:$4" 13 .Zoom = 50 14 .PaperSize = xlPaperA4 15 .BlackAndWhite = False 16 .Orientation = xlPortrait 17 .CenterHorizontally = False 18 .LeftHeader = "抽出条件" & Chr(10) & _            '←このヘッダー設定は問題なく適用されます 19 " 氏名:" & name_input.Value & _ 20 "  №:" & const_num_input.Value & _ 21 " 件名:" & const_name_input.Value & Chr(10) & _ 22 " 期間:" & stdate & " ~ " & cldate 23 .CenterHeader = Range("A1").Value & Chr(10) & "&P/&N" 24 .RightHeader = " 分析" & Chr(10) & _ 25 "カウント:" & day_counter.Caption & _ 26 anlz 27 End With 28 Application.PrintCommunication = True 29End Sub 30' 31 32Sub 印刷設定リセット() 33 ActiveSheet.PageSetup.PrintArea = Range("データテーブル名").Address 34 ActiveSheet.PageSetup.LeftHeader = "" 35 Application.PrintCommunication = False 36 With ActiveWorkbook.ActiveSheet.PageSetup 37 .LeftHeader = ""                       '←ここでヘッダー表示を空白に戻したいのですが、それが自動実行だと適用されません。 38 .CenterHeader = "データテーブル名" & Chr(10) & "&P/&N" 39 .RightHeader = "" 40 .LeftMargin = Application.InchesToPoints(0.78740157480315) 41 .RightMargin = Application.InchesToPoints(0.78740157480315) 42 .TopMargin = Application.InchesToPoints(1.5748031496063) 43 .BottomMargin = Application.InchesToPoints(0) 44 .HeaderMargin = Application.InchesToPoints(0.984251968503937) 45 .FooterMargin = Application.InchesToPoints(0) 46 .Zoom = False 47 .FitToPagesWide = 1 48 .FitToPagesTall = False 49 .PrintTitleRows = "$4:$4" 50 .PaperSize = xlPaperA3 51 .BlackAndWhite = False 52 .Orientation = xlLandscape 53 .CenterHorizontally = True 54 End With 55 Application.PrintCommunication = True 56End Sub 57

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

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

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

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

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

kenshirou

2020/06/12 06:41

この処理を行う間に、ActiveSheetが変わることはないですか? 例えば、別シートの内容を参照するために、別シートがActiveになってしまうようなことがあれば、別シートに対して設定が行われてしまいます。
ats1

2020/06/16 06:02 編集

はい。ActiveSheetが変わることはありません。 実は、上記のソースコードで .RightHeader = "" としているところを、試しに .RightHeader = "(任意の値)" に変更してみたところ、この右ヘッダーに変更が適用されるんです。 しかし、空白で上書きしようとするとそれができず、 ついでにいうと左ヘッダーに関しては右ヘッダーのような任意の値での上書きすらできない状態です。 乱暴な言い方になりますが、正直もうわけがわかりません。 ご教授ありがとうございました。
kenshirou

2020/06/17 03:14

フィルタ設定・印刷設定・印刷・フィルタ解除・印刷設定解除がどのような流れで行われているかは分かりませんが、例えば、印刷設定解除を一連の処理では行わず、一呼吸おいてから印刷設定解除処理を行うとどうなるのでしょうか? (例えば印刷設定解除を呼び出すボタンを用意して、適当なタイミングでボタン押下)
ats1

2020/06/17 04:41

回答ありがとうございます。 ご指摘のとおりに、印刷設定解除処理を別タイミングで行うようにしたとき、今度はなぜか左ヘッダーだけが空白になりました… というところで、この左ヘッダーの空白化設定だけが withステートメントの前、 というよりは.PrintCommunication = Falseを行う前に書かれていることに気づき、色々試しました。 結果、解決することができました。 どうやら.PrintCommunication = trueの状態でないとヘッダーの設定のリセット(空白化)がうまく行かないらしいです… どうしてこういうことになるのかはわからないです… とりあえず、自分の意図していた動きをするようにはなりました。 ご協力感謝します。ありがとうございました。
kenshirou

2020/06/17 05:33

解決したようで、良かったです。(^^)/
guest

回答2

0

自己解決

自己解決の形で処理してしまいすみません。
kenshirouさま、mattuwanさま、指示と回答をありがとうございました。

ヘッダーの空白化設定は、
.printcomunication = true の状態でないと処理されないみたいです。

なぜこうなるのかはわかりませんが、上記のコードのヘッダー設定の部分だけ
.printcomunication = true の記述の後の行に移動したら
上手く設定されるようになりました。

みなさん、本当にありがとうございました。

投稿2020/06/17 04:45

ats1

総合スコア0

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

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

0

ところが、VBA画面でF8を押しながらステップ実行していくと
しっかりフィルター解除状態用の設定が適用されています。

印刷のページ設定は手動でやってわかると思いますが、
重いです。
なのでVBAで次々と命令を出していくと、
ページ設定の処理が終わる前に、次々命令が出されても
処理が追い付かないかと思います。
ステップ実行だと、ゆっくり、1行1行実行して結果を見ながら
実行していくので不具合がないのでしょう。
WaitやSleep等で少し待ってあげてはいかがでしょう?

それか、フィルターオプションでデータを別のシートに抽出して
そちらはそちらで印刷のページ設定をしておけば、
設定を頻繁に変える必要がなくなると思います。

投稿2020/06/09 05:10

mattuwan

総合スコア2163

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

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

ats1

2020/06/09 06:22

ご回答ありがとうございます。 早速、作成中のVBAでwaitメソッドとsleepメソッドを試してみましたが 残念ながら相変わらずページ設定はリセットされませんでした。 フィルターオプションを利用する方法なら、確かに確実ですね。 ただ、シート管理が複雑になる可能性が考えられるので実際にその方法で対応するのは 最終手段にしておこうかと考えております。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問