設計書やプレゼン資料などをWordで作ったときに、対顧客やグループ内で文書の内容をレビューする場合、本文には直接書き込まずに、欄外に捕捉文を追加できる「コメント機能」が便利です。
しかし、ひとたびコメントが入力された文書を印刷しようとすると、半強制的にコメントも一緒に印刷されてしまいます。
この非常にありがた迷惑な機能というか、Wordの仕様が存在していることで、何枚のコピー用紙が無駄に浪費されていったことか…数えるのも嫌になります。
今回はこの機能を避けて、Wordの本文だけを確実に印刷する手順を、マクロで自動化してしまおうというお話です。
手動でコメントを非表示にして印刷する方法
「印刷」画面で[設定]>[すべてのページを印刷]をクリックすると、メニューの下の方に「変更履歴/コメントの印刷」という項目が有ります。この項目のチェックを外すと、コメントエリアを非表示にして本文のみを印刷することができます。
で、この機能の何がメーワクかというと、
チェックを外しても、再び印刷画面を開いたときにはチェックが復活していることです。
何度チェックを外してもゾンビのように何度でも蘇ってきて非常に鬱陶しいです。。。
こういった手作業では面倒なことはマクロで簡単にしてしまいましょう!
変更履歴/コメントの印刷をマクロで制御する
印刷設定の画面に有る、「変更履歴/コメントの印刷」という項目は、VBAでは以下のプロパティで管理されています。
隠し文字の印刷を制御するプロパティ
Application.Options.PrintHiddenText
これはBoolean型のプロパティで、Trueに設定すると隠し文字が印刷されるようになります。
印刷するVBAコードの取得
続いて「マクロの記録」機能を使って、Wordファイルを印刷する操作を行うと、次のようなVBAコードが記録されます。
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0
VBAでは、Application.PrintOutという関数を呼んでWordファイルを印刷していることが分かりますね。
先に紹介したPrintHiddenTextプロパティは登場しないので、プロパティを設定するコードを追加して整理してみます。
コメントと変更履歴を非表示にして印刷するマクロ
Wordの仕様では、「変更履歴/コメントの印刷」オプションは印刷実行後に元に戻るので、VBAのコードでも、処理の最後に設定値を元に戻すようにしています。
また、マクロ実行中に何らかのエラーが発生しても、設定値は確実に元に戻すようにしています。
以下のGoTo文がその役割を担っています。
On Error GoTo Error_Print Error_Print:
GoTo文を使うと処理の流れが煩雑になるため、使わない方がよいとされることが多いのですが、VBAにはJavaのtry~catchの様な簡単にエラーを検知する仕組みが無いため、On Errorと組み合わせることで、エラー検知を実現しています。
また、印刷倍率は変更しないので、以下のプロパティの設定は省略しています。
PrintZoomColumn、PrintZoomRow、PrintZoomPaperWidth、PrintZoomPaperHeight
'------------------------------ 'コメント欄を非表示にして印刷 '------------------------------ Sub PrintWithoutComments() On Error GoTo Error_Print Dim HiddenText As Boolean With Application '隠し文字の印刷設定を退避 HiddenText = .Options.PrintHiddenText '隠し文字の印刷をOFF .Options.PrintHiddenText = False .PrintOut FileName:="", _ Range:=wdPrintAllDocument, _ Item:=wdPrintDocumentContent, _ Copies:=1, _ Pages:="", _ PageType:=wdPrintAllPages, _ Collate:=True, _ Background:=True, _ PrintToFile:=False End With GoTo Error_Print Exit Sub Error_Print: With Application '隠し文字の印刷設定を復元 '※Word標準の動作では、印刷の度に隠し文字を印刷する設定に戻るため、 '変更前の設定値に戻す。 .Options.PrintHiddenText = HiddenText End With End Sub
では、今回はこの辺で。
コメント