「excel vba wordの定数を使う」
という検索で、このサイト・インストラクターのネタ帳へのあることに気が付きました。
コードを書くときに定数を使うのは、可読性を上げるためにいいことです。
ですが、初期状態のExcelのVBE(Visual Basic Editor)で、Wordを操作するコードを書こうとしても、Word VBA(Visual Basic for Applications)の組み込み定数は使えません。
「excel vba wordの定数を使う」
という検索は、ExcelのVBEで、Word VBAの定数を使えるようにするには、どうすればいいのかを探している方による検索でしょう。
Excel VBEで参照設定を行う
ExcelのVBEで、Wordの組み込み定数を使うためには、まずは参照設定を行いましょう。VBEのメニュー[ツール]-[参照設定]をクリック
↓
[参照設定-VBAProject]ダイアログの[参照可能なライブラリファイル]欄で、
「Microsoft Word ○ Object Library」チェックボックスをOnに
(○の部分はバージョンに応じて15.0などの数字が表示されます)
↓
[参照設定-VBAProject]ダイアログ-[OK]ボタンをクリック
[参照設定-VBAProject]ダイアログの[参照可能なライブラリファイル]欄には、アルファベット順にたくさんの項目が並んでいます。Wordがインストールされていれば下図のような位置に「Microsoft Word ○ Object Library」は見つかるはずです。
参照設定時に使えるサンプルマクロ
参照設定が行われれば、例えば、以下のようなExcelマクロが動くはずです。(参照設定が行われていない場合、実行しようとしたり、VBA Projectのコンパイルを実行したりすると「コンパイルエラー:ユーザー定義型は定義されていません。」というエラーメッセージが表示されます。)
Dim wd_app As Word.Application
Set wd_app = New Word.Application
MsgBox wd_app.International(wdCurrencyCode)
Set wd_app = Nothing
参照設定が行われた、日本語環境のパソコンで上記のExcelマクロを実行すると、下図のように通貨記号「\」がメッセージボックスに表示されます。
WordライブラリのApplicationオブジェクトとして変数・wd_appを宣言して、
Dim wd_app As Word.Application
Newキーワードを使って、変数・wd_appにWord.Applicationをセットしています。
Set wd_app = New Word.Application
メッセージを表示しているのが、Wordのオブジェクト式を利用している、
MsgBox wd_app.International(wdCurrencyCode)
の部分です。
WordのApplicationオブジェクトのInternationalプロパティに、
Wordの列挙体・WdInternationalIndexに定義されている、Wordの定数・wdCurrencyCodeを指定することで、
通貨記号を取得して、表示しています。
参照設定を行っておけば、定数を使えるだけでなく、コーディング時に自動メンバー表示も行われるようになります。
Excel VBEのオブジェクトブラウザーでも、Wordのオブジェクトについて調べることができるようになります。
参照設定を行わない場合
参照設定を行うと、組み込み定数も使える、自動メンバー表示も行われる、オブジェクトブラウザーも使える、といいことずくめですが、個々のパソコンごと・アカウントごとに参照設定をしなければならないのが課題です。
ですから、マクロを作成する段階では参照設定を行っておいて、実際にマクロを使う段階では、参照設定を行わなくても使える、CreateObject関数を使ったコードに変更するというのが解決策の一つとしてあります。
先のマクロを、CreateObject関数を使ったマクロに修正すると以下のとおりです。
Sub Sample_参照設定なし()
Const wdCurrencyCode = 20
''Dim wd_app As Word.Application
Dim wd_app As Object
''Set wd_app = New Word.Application
Set wd_app = CreateObject("Word.Application")
MsgBox wd_app.International(wdCurrencyCode)
Set wd_app = Nothing
参照設定を行っていないので、変数をObject型で宣言して、
Dim wd_app As Object
CreateObject関数を使って、WordライブラリのApplicationオブジェクトを変数・wd_appにセットしています。
Set wd_app = CreateObject("Word.Application")
Wordの定数を使っていた以下のコードの部分は、
MsgBox wd_app.International(wdCurrencyCode)
事前に、
Const wdCurrencyCode = 20
と、組み込み定数と同じ名前で、定数宣言をすることで、先のマクロを修正しないで済むようにしています。
ここでは、このSubプロシージャでしかWordの定数を使っていないという想定のため、プロシージャ内で定数宣言していますが、同じモジュールの他のプロシージャでもWordの定数を使っているのならモジュールの宣言部で宣言したり、更に、複数のモジュールにWordの定数を利用するプロシージャが存在するなら、定数宣言用のモジュールを作って、Public宣言したりするといいのではないでしょうか。
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWord VBAの組み込み定数を使うには?