Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWord VBAの組み込み定数を使うには?

Excel VBAでWord VBAの組み込み定数を使うには?

対象:Excel2007, Excel2010, Excel2013

Excel VBAでWord VBAの定数を使うには?

「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の組み込み定数を使うためには、まずは参照設定を行いましょう。
▼操作手順:Wordへの参照設定を行う
VBEのメニュー[ツール]-[参照設定]をクリック
 ↓
[参照設定-VBAProject]ダイアログの[参照可能なライブラリファイル]欄で、
「Microsoft Word ○ Object Library」チェックボックスをOnに
(○の部分はバージョンに応じて15.0などの数字が表示されます)
 ↓
[参照設定-VBAProject]ダイアログ-[OK]ボタンをクリック

[参照設定-VBAProject]ダイアログの[参照可能なライブラリファイル]欄には、アルファベット順にたくさんの項目が並んでいます。Wordがインストールされていれば下図のような位置に「Microsoft Word ○ Object Library」は見つかるはずです。

Excel VBAでWord VBAの定数を使うには?

参照設定時に使えるサンプルマクロ

参照設定が行われれば、例えば、以下のようなExcelマクロが動くはずです。(参照設定が行われていない場合、実行しようとしたり、VBA Projectのコンパイルを実行したりすると「コンパイルエラー:ユーザー定義型は定義されていません。」というエラーメッセージが表示されます。)

Sub Sample()

 Dim wd_app As Word.Application

 Set wd_app = New Word.Application
 MsgBox wd_app.International(wdCurrencyCode)
 Set wd_app = Nothing

End Sub

参照設定が行われた、日本語環境のパソコンで上記のExcelマクロを実行すると、下図のように通貨記号「\」がメッセージボックスに表示されます。

Excel VBAでWord VBAの定数を使うには?

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プロパティに、

Excel VBAでWord VBAの定数を使うには?

Wordの列挙体・WdInternationalIndexに定義されている、Wordの定数・wdCurrencyCodeを指定することで、

Excel VBAでWord VBAの定数を使うには?

通貨記号を取得して、表示しています。

参照設定を行っておけば、定数を使えるだけでなく、コーディング時に自動メンバー表示も行われるようになります。

Excel VBAでWord VBAの定数を使うには?

Excel VBEのオブジェクトブラウザーでも、Wordのオブジェクトについて調べることができるようになります。

Excel VBAでWord VBAの定数を使うには?

参照設定を行わない場合

参照設定を行うと、組み込み定数も使える、自動メンバー表示も行われる、オブジェクトブラウザーも使える、といいことずくめですが、個々のパソコンごと・アカウントごとに参照設定をしなければならないのが課題です。

ですから、マクロを作成する段階では参照設定を行っておいて、実際にマクロを使う段階では、参照設定を行わなくても使える、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

End Sub

参照設定を行っていないので、変数を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の組み込み定数を使うには?

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.