VBAを使ってMicrosoft Word文書にカスタムスタイルを記述する方法 - TechRepublic

VBAを使ってMicrosoft Word文書にカスタムスタイルを記述する方法 - TechRepublic
Microsoft Wordの画像の書き方
画像: monticellllo/Adobe Stock

Microsoft Wordで効率的に作業する上で、スタイルは非常に重要です。多くのカスタムスタイルを含むファイルやテンプレートを扱う場合、それらのリストがあれば便利ですが、Wordにはすべてのスタイルをリスト表示する組み込み機能がありません。このWordチュートリアルでは、現在の文書にすべてのスタイル(カスタムスタイル、組み込みスタイル、またはその両方)の名前を挿入するVBAプロシージャの作成方法を説明します。文書は印刷して、後で参照したり、記録したりすることができます。

参照: このトレーニング バンドルで Microsoft がどれだけ多くのことをサポートできるかを知る (TechRepublic Academy)

Windows 64ビットシステムでMicrosoft 365デスクトップを使用していますが、以前のバージョンでもご利用いただけます。ご参考までに、デモ用の.docmファイルと.docファイルをダウンロードしていただけます。Web版WordはVBAプロシージャをサポートしていません。

WordのVBA手順について知っておくべきこと

以下のVBAプロシージャ(マクロとも呼ばれます)は、多くの処理を実行します。まず、このプロシージャは、ユーザーに組み込みスタイル、カスタムスタイル、またはすべてのスタイルの一覧から選択するよう促します。ユーザーが応答すると、プロシージャは新規文書を開き、適切なスタイルの一覧を生成します。最後に、生成されたスタイルの数を表示します。このプロシージャは、このWord文書を保存しません。プロシージャの行数を考えると、それほど多くの処理は実行されていないように思えます。

Sub ListStyles()

'Generate a list of custom (1), built-in (2), or all Word styles (3)

'in the active document.

Dim doc As Document

Dim sty As Style

Dim inp As Integer

Dim i As Integer

i = 0

'Request input value from user.

On Error GoTo errHandler: 'Catches Cancel or X.

inp = InputBox("Please enter one of the following values 1, 2, or 3." _

& vbLf & vbLf & _

"1. Custom styles" & vbLf & _

"2. Built-in styles" & vbLf & _

"3. All styles", _

"Print a list of styles", 1)

'Check for invalid input value.

If inp >= 4 Or inp < 1 Then

MsgBox "Please enter a valid input value: 1, 2, or 3.", vbOKOnly, _

"Input Error"

Exit Sub

End If

On Error GoTo errHandler

Set doc = Documents.Add

'Cycle through styles in active document.

With doc

For Each sty In .Styles

If inp = 1 And sty.BuiltIn = False Then

.Range.InsertAfter sty.NameLocal & vbCr

i = i + 1

ElseIf inp = 2 And sty.BuiltIn = True Then

.Range.InsertAfter sty.NameLocal & vbCr

i = i + 1

ElseIf inp = 3 Then

.Range.InsertAfter sty.NameLocal & vbCr

i = i + 1

'No Else because earlier code catches any value other than 1, 2, or 3.

End If

Next sty

End With

MsgBox i & " styles found.", vbOKOnly

Set doc = Nothing

Exit Sub

errHandler:

If Err.Number = 13 Then Exit Sub

MsgBox Err.Number & " " & Err.Description

Set doc = Nothing

End Sub

コードの約半分は入力エラーのチェックです。いくつかの変数を宣言した後、コードは入力ボックスを表示し、ユーザーに以下の3つの値のいずれかを入力するよう促します。

  • カスタムスタイル
  • 組み込みスタイル
  • すべてのスタイル

最初の On Error ステートメントは、ユーザーが [キャンセル] または [X] をクリックした場合にスローされるエラーをキャッチします。この場合、errHandler ブロックはプロシージャを終了します。

If Err.Number = 13 Then Exit Sub

[キャンセル] または [X] をクリックすると、コードはユーザーが結局は手順を実行したくないと想定し、説明メッセージ ボックスを表示しません。

ユーザーがメッセージボックスに値を入力して応答すると、プロシージャはその入力値をinpという整数変数に格納します。inpが1、2、3以外の値の場合、コードはユーザーに指定された値(1、2、または3)のいずれかを入力するよう求めるメッセージボックスを表示し、その後プロシージャを終了します。

inp が 1、2、または 3 の場合、For Each ブロックは If ステートメントを使用してさらにチェックを実行します。

  • inp が 1 の場合、ユーザーはカスタムスタイルのリストを出力します。次のチェックで sty.BuiltIn = False が true の場合、sty はカスタムスタイルであるため、ステートメントはスタイル名をリストに追加し、i カウンタに 1 を加算します。
  • inp が 2 の場合、ユーザーは組み込みスタイルのリストを出力します。sty.BuiltIn = True のチェックが true の場合、sty は組み込みスタイルなので、このステートメントはスタイルをリストに追加し、i カウンタに 1 を加算します。
  • inp が 3 の場合、ユーザーはすべてのスタイルのリストを印刷したいのでチェックはありません。コードはスタイルをリストに追加し、i カウンターに 1 を追加します。

For Each は、プロシージャがアクティブドキュメント内のすべてのスタイルを巡回すると終了します。最後のいくつかのステートメントは、リストされているスタイルの数を示すメッセージを表示し、doc オブジェクトを破棄して Sub プロシージャを終了します。エラー処理では、エラーの番号と説明が表示されます。コードの大部分は無効な入力値を捕捉するため、コード量が非常に多くなっています。

手順を確認したので、それを Word 文書に入力します。

参照: 誰もが知っておくべき Windows、Linux、Mac のコマンド (無料 PDF)  (TechRepublic)

WordでVBAの手順を入力する方法

この手順は、同じドキュメントだけでなく、複数のドキュメントで実行する必要があるでしょう。その場合は、テンプレートファイル(.dotm)の作成を検討してください。別の方法としては、Personal.xlsb ブックに手順を追加する方法があります。これにより、開いているどのブックファイルからでも手順にアクセスできるようになります。デモファイルは、マクロが有効になっている .docm ファイルです。これは、今回の目的に最も使いやすいためです。

リボン版をご利用の場合は、必ずマクロ有効ファイルとしてブックを保存してください。メニュー版をご利用の場合は、この手順は省略できます。ご自身で作業し、ダウンロード可能なデモファイルを使用しない場合は、ファイルにカスタムスタイルを追加して、3つの選択肢がどのように機能するかを確認してください。

手順を入力するには、Alt + F11 キーを押して Visual Basic エディターを開きます。左側のプロジェクト エクスプローラーで「ThisDocument」を選択します。複数の Word ファイルを開いている場合は、必ず正しいファイルを選択してください。コードは手動で入力することも、ダウンロード可能な .cls ファイルをインポートすることもできます。また、手順はダウンロード可能な .docm ファイルにも含まれています。コードを手動で入力する場合は、この Web ページから貼り付けないでください。代わりに、コードをテキスト エディターにコピーし、そのコードを「ThisDocument」に貼り付けてください。これにより、エラーの原因となる可能性のある Web 上の文字が削除されます。

ファイルを保存してWord文書に戻ります。VBAプロシージャを実行して動作を確認する準備が整いました。

WordでVBAプロシージャを実行する方法

いよいよ簡単な部分です。手順を実行します。実行するには、「開発」タブをクリックし、「マクロ」グループの「マクロ」をクリックします。表示されるダイアログで「ListStyles」(図A)を選択し、「実行」をクリックします。

図A

Word で VBA プロシージャ ListStyles を実行します。
Microsoft WordでVBAプロシージャListStylesを実行する

メッセージボックスはデフォルトで最初の選択肢「1. カスタムスタイル」(図B)に設定されています。入力値を変更せずに「OK」をクリックします。

図B

Word で、「1. カスタム スタイル」を選択し、「OK」をクリックします。
Microsoft Word で、「1. カスタム スタイル」を選択し、「OK」をクリックします。

図Cに示すように、デモファイルにはMyCustomStyleというカスタムスタイルが1つ含まれています。ドキュメント作成のためにこのファイルを保存する場合は、必ず手動で保存してください。

図C

VBA プロシージャは、アクティブなドキュメントにカスタム スタイルを挿入し、現在のドキュメントで見つかったカスタム スタイルの数 (1) を表示します。
VBA プロシージャは、アクティブなドキュメントにカスタム スタイルを挿入します。

手順を再度実行し、組み込みスタイルとして「2」を選択してください。図Dは300件以上の結果を示しています。ListStylesが表示されない場合は、手順の最初の実行時に作成された新しい文書にいる可能性があります。マクロが有効になっているファイルに戻ってください。

図D

Microsoft Word には、300 を超える組み込みスタイルがあります。
Microsoft Word には、300 を超える組み込みスタイルがあります。

VBA プロシージャを引き続き実行し、他の入力値でどの​​ように動作するかを確認します。3 を入力し、[キャンセル] をクリックし、0 と 4 を入力します。

必要な時に毎回マクロを実行するために、わざわざ手順を踏むのは面倒ですよね。クイックアクセスツールバーまたはカスタムグループに追加することをお勧めします。もし追加方法がわからない場合は、TechRepublicの記事「OfficeマクロをQATツールバーに追加してクイックアクセスする方法」をご覧ください。

この手順を Personal.xlsb に入力してすべてのブックで使用できるようにする方法がわからない場合は、TechRepublic の記事「Excel で開いているすべてのブックを閉じる VBA プロシージャを作成する方法」をお読みください。この記事には、Personal.xlsb を使用する手順が記載されています。

ExcelのVBAについてもっと詳しく知りたいですか?TechRepublic Academyの以下のリソースをご覧ください。

  • Microsoft VBA バンドル
  • 完全な Microsoft Excel と VBA バンドル
  • Microsoft Excel マクロと Excel VBA をマスターする
  • Excel、VBA、データサイエンス認定トレーニングの完全バンドル
Tagged: