ExcelからVBAを利用してWordやPowerPointなどを操作するコードを見ると「参照設定」がなされている場合とそうでない場合があったりします。今回は参照設定の有無によるコードの違いについて簡単にまとめておきます。以下ではExcelからWordを操作する場合を例として説明します。
そもそも参照設定をするには?
Excel VBAからWordを利用する場合の参照設定は、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。
参照設定の有無によるコードの違い
参照設定の有無によるコードの違いを確認するために、Excel VBAからWordのアプリケーションを起動させるコードを見てみましょう。両者の違いはWordを操作するために作成するオブジェクトが「Object型として宣言したのちCreateObjectメソッドによって作成される」か「Word.Application型として宣言されて新規作成されるか」です。オブジェクトの生成方法が少し違うわけです。
両者の書き方はそれぞれアーリーバインディング書式、レイトバインディング書式と呼ばれています。
参照設定ありの場合(アーリーバインディング書式)
Public Sub RunWordTest1()
Dim objWord As Word.Application
Set objWord = New Word.Application
objWord.Visible = True
End Sub
参照設定なしの場合(レイトバインディング書式)
Public Sub RunWordTest2()
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
End Sub
書式による違い
アーリーバインディング(参照設定あり)かレイトバインディング(参照設定なし)かによる違いは大きく見れば以下の2つです。
- コードエディタの入力支援機能(インテリセンス)が使えるかどうか
- 動作速度
参照設定ありのアーリーバインディング書式では、「Word.Application」オブジェクトとして元から作成するので、VBAのコードエディタがちゃんとオブジェクトのタイプを認識してくれます。これにより、オブジェクトのプロパティやメソッドを使用する際に候補を自動で提示してくれるようになり開発がはかどります。
一方でレイトバインディング書式では、一度Object型として作成してから操作を行うため、コードエディタが自動で認識をしてくれません。またその都度オブジェクトの型を認識しながら動作しなくてはならなくなるため、アーリーバインディング書式と比べて動作が遅くなります。ただこの動作速度については繰り返し大量に操作を行ったりしない限りは気になるほどのものではないのであまり気にする必要はないかもしれません。
結論:可能であれば参照設定を使う
上記の説明の通り、参照設定ありとなしでは参照設定ありの方にメリットが大きいです。そのため、特になにも問題がなければ基本的には参照設定を行ったうえでアーリーバインディング書式を使ってコードを書くことをお勧めします。企業などによってはシステム環境により参照設定を自在に行えないケースもあると聞きますのでそのような場合は仕方がありませんが、そうでなければ参照設定を用いないレイトバインディング書式を使用する必要性は大きくないと思います。