【VBAリファレンス|実務向け】Wordの表示モードをVBAで自在に操る!効率的な文書作成を自動化

スポンサーリンク

皆さん、こんにちは!ベテランExcel VBA講師の〇〇です。
今回は「Wordの画面構成」という、一見VBAとは直接関係なさそうなテーマを、VBAを使って「実務で役立つ自動化テクニック」へと昇華させていきます。

1. 導入: なぜWordの表示モードをVBAで制御するのか?

Wordで文書を作成したり、レビューしたりする際、皆さんは無意識のうちに「表示モード」や「ズームレベル」を切り替えているはずです。例えば、

  • 文書全体の流れを確認するために「下書き表示」にする。
  • 印刷イメージを確認しながら体裁を整えるために「印刷レイアウト表示」にする。
  • 特定の箇所を拡大して細かく編集するために「ズーム」を変更する。

これらの操作はマウスやリボンから手動で行えますが、もし定型的な作業フローの中で、特定の表示設定に何度も切り替える必要があるとしたらどうでしょうか?一つ一つのクリックが積もり積もって、意外と多くの時間を浪費しているかもしれません。

そこでVBAの出番です!Wordの表示モードやズームレベルをVBAで自動的に切り替えることで、

  • 特定の作業段階に応じた最適な表示設定を瞬時に適用できる
  • 複数の文書を開いた際に、常に統一された表示で作業を開始できる
  • レビュー担当者への引き渡し時に、見やすい表示設定で提供できる

といったメリットが生まれます。今回は、Word2003を例に、VBAでWordの表示設定を制御する基本と実践をご紹介します。もちろん、最新のWordでも基本的な考え方は同じですよ!

2. 基礎知識: Wordの表示を制御する「View」オブジェクトとは?

Word VBAで文書の「表示」に関する設定を操作する際に最も重要となるのが、View オブジェクトです。

WordのVBAオブジェクトモデルを簡単に説明すると、以下のようになります。

  • Application オブジェクト: Wordアプリケーション全体(Wordそのもの)を表します。
  • Document オブジェクト: 開いている個々の文書ファイルを表します。
  • Window オブジェクト: 文書が表示されているウィンドウを表します。一つの文書が複数のウィンドウで開かれることもあります。
  • View オブジェクト: そのウィンドウ内での文書の表示方法(レイアウト、ズーム、ヘッダー/フッターの表示など)を制御します。

つまり、VBAで表示モードを変更したい場合は、「Application(Word)の中の、現在アクティブなWindow(ウィンドウ)の、View(表示設定)を変更する」という流れになります。

具体的には、現在アクティブなウィンドウのViewオブジェクトは ActiveWindow.View で取得できます。このViewオブジェクトが持つ様々なプロパティを使って、表示モードやズームレベルを操作していくわけです。

主要な表示モードとVBAでの定数(Word2003の場合)は以下の通りです。

  • 印刷レイアウト表示: wdPrintView
  • 下書き表示: wdNormalView (Word2003では「下書き表示」を指します)
  • Webレイアウト表示: wdWebView
  • アウトライン表示: wdOutlineView
  • 閲覧レイアウト表示: wdReadingView

3. 実装/解決策: VBAで表示モードとズームを切り替える

VBAでWordの表示モードやズームレベルを操作する手順はシンプルです。Excel VBAからWordアプリケーションを操作する場合は、まずWordアプリケーションのオブジェクトを作成し、文書を開く(または新規作成する)必要があります。

その後、ActiveWindow.View.Type プロパティに上記の定数を設定することで表示モードが切り替わります。
ズームレベルを変更するには、ActiveWindow.View.Zoom.Percentage プロパティにパーセンテージ(例: 100, 125, 75)を数値で設定します。

4. サンプルプログラム: Excel VBAからWordを操作し、表示設定を変更する

以下のVBAコードは、ExcelからWordを起動し、新しい文書を開いた後、様々な表示モードやズームレベルを切り替えて、その効果を確認するものです。

Sub Wordの表示設定をVBAで自動変更する()

‘ Wordアプリケーションオブジェクトを宣言
Dim objWord As Object
‘ Word文書オブジェクトを宣言
Dim objDoc As Object

On Error GoTo ErrorHandler

‘ 既存のWordプロセスがあるか確認し、あればそれを利用、なければ新規作成
On Error Resume Next ‘ エラーを一時的に無視
Set objWord = GetObject(, “Word.Application”)
If objWord Is Nothing Then
‘ Wordが起動していなければ新規起動
Set objWord = CreateObject(“Word.Application”)
End If
On Error GoTo ErrorHandler ‘ エラー処理を再開

‘ Wordアプリケーションを可視化(画面表示)
objWord.Visible = True

‘ 新しいWord文書を作成
Set objDoc = objWord.Documents.Add

‘ デモ用のテキストを挿入
objDoc.Content.Text = “これはVBAで自動生成されたWord文書です。” & vbCrLf & _
“様々な表示モードとズームレベルを試してみましょう。” & vbCrLf & _
String(500, “サンプルテキスト “) ‘ 長めのテキストでスクロール可能に

‘ — 表示モードの切り替え —

‘ 1. 印刷レイアウト表示に設定
objWord.ActiveWindow.View.Type = wdPrintView ‘ wdPrintView は Word VBA の定数
objWord.ActiveWindow.View.Zoom.Percentage = 100 ‘ ズームを100%に設定
MsgBox “印刷レイアウト表示に切り替えました。(100%)”, vbInformation, “Word表示設定変更”
Application.Wait Now + TimeValue(“00:00:02”) ‘ 2秒間待機

‘ 2. 下書き表示に設定 (Word2003ではNormalView)
objWord.ActiveWindow.View.Type = wdNormalView ‘ wdNormalView は Word VBA の定数
objWord.ActiveWindow.View.Zoom.Percentage = 75 ‘ ズームを75%に設定
MsgBox “下書き表示に切り替えました。(75%)”, vbInformation, “Word表示設定変更”
Application.Wait Now + TimeValue(“00:00:02”) ‘ 2秒間待機

‘ 3. Webレイアウト表示に設定
objWord.ActiveWindow.View.Type = wdWebView ‘ wdWebView は Word VBA の定数
objWord.ActiveWindow.View.Zoom.Percentage = 125 ‘ ズームを125%に設定
MsgBox “Webレイアウト表示に切り替えました。(125%)”, vbInformation, “Word表示設定変更”
Application.Wait Now + TimeValue(“00:00:02”) ‘ 2秒間待機

‘ 4. 閲覧レイアウト表示に設定 (Word2003以降で利用可能)
‘ 環境によっては wdReadingView が使用できない場合があります。
‘ その場合はこの行をコメントアウトしてください。
On Error Resume Next ‘ 閲覧レイアウト表示に対応していない場合のVBAエラーを回避
objWord.ActiveWindow.View.Type = wdReadingView ‘ wdReadingView は Word VBA の定数
objWord.ActiveWindow.View.Zoom.Percentage = 100 ‘ ズームを100%に設定
On Error GoTo ErrorHandler ‘ エラー処理を再開
If objWord.ActiveWindow.View.Type = wdReadingView Then ‘ 切り替えが成功したかチェック
MsgBox “閲覧レイアウト表示に切り替えました。(100%)”, vbInformation, “Word表示設定変更”
Application.Wait Now + TimeValue(“00:00:02”) ‘ 2秒間待機
Else
MsgBox “このバージョンでは閲覧レイアウト表示に切り替えられませんでした。”, vbExclamation, “Word表示設定変更”
End If

‘ 最終的に印刷レイアウト表示に戻して終了
objWord.ActiveWindow.View.Type = wdPrintView
objWord.ActiveWindow.View.Zoom.Percentage = 100
MsgBox “最終的に印刷レイアウト表示に戻しました。Wordを閉じます。”, vbInformation, “Word表示設定変更”

‘ 文書を保存せずに閉じる(ユーザーに確認を求めない)
objDoc.Close SaveChanges:=False

‘ Wordアプリケーションを終了
objWord.Quit

‘ オブジェクトの解放
Set objDoc = Nothing
Set objWord = Nothing

Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
‘ エラー発生時にもオブジェクトを解放する
If Not objDoc Is Nothing Then
objDoc.Close SaveChanges:=False
End If
If Not objWord Is Nothing Then
objWord.Quit
End If
Set objDoc = Nothing
Set objWord = Nothing

End Sub

【コードの実行方法】

  1. Excelを開き、Alt + F11を押してVBAエディタを開きます。
  2. 左側のプロジェクトエクスプローラーで、お好きなブックの「標準モジュール」を右クリックし、「挿入」→「標準モジュール」を選択します。
  3. 開いたモジュールウィンドウに上記のコードをコピー&ペーストします。
  4. VBAエディタでカーソルをコード内に置き、F5キーを押すか、ツールバーの「実行」ボタンをクリックします。

Wordが起動し、表示モードが次々に切り替わる様子が確認できるはずです。

5. 応用・注意点: 実務で役立つ補足情報

  • Wordバージョンの互換性: 今回はWord2003を例にしましたが、wdPrintViewなどの定数は基本的に新しいWordバージョンでも利用できます。ただし、Wordのバージョンアップに伴い、新しい表示モード(例: 集中モード)が追加されたり、古い表示モードの名称や機能が変わったりすることがあります。実務では、ターゲットとするWordのバージョンでテストすることが重要です。
  • 画面更新の停止: VBAで頻繁に表示設定を切り替える場合、画面がちらつくことがあります。これを防ぐには、処理の最初に objWord.ScreenUpdating = False を設定し、処理の最後に objWord.ScreenUpdating = True で元に戻すと良いでしょう。
  • オブジェクトの適切な解放: WordアプリケーションをVBAで操作した後は、必ず Set objDoc = Nothing、Set objWord = Nothing でオブジェクトを解放し、Wordアプリケーションを objWord.Quit で終了させましょう。これを怠ると、Wordのプロセスがバックグラウンドに残ってしまい、システムのパフォーマンスに影響を与える可能性があります。
  • エラーハンドリング: Wordの起動失敗や文書のオープン失敗など、予期せぬエラーが発生することもあります。On Error GoTo ErrorHandler のようなエラーハンドリングを適切に導入することで、VBAコードの堅牢性を高めることができます。

Wordの画面構成をVBAで制御するテクニックは、Excel VBAからWord文書を自動生成する際に、最終的な表示形式を整える上でも非常に役立ちます。ぜひ、皆さんの業務効率化に活用してみてください!

タイトルとURLをコピーしました