【備忘録7】ExcelVBA~早期バインディングと遅延バインディング~

ExcelVBA-マクロ

ExcelVBAでWindows上のファイルを操作したり、OUTLOOKなど別のアプリを操作する場合は、外部オブジェクトライブラリからクラスのインスタンスを生成し、各プロパティの参照や変更、メソッドの実行を行います。Dictionary(連想配列)についても同様です。

今回は外部オブジェクトライブラリからインスタンスを生成する方法として、早期バインディング(事前バインディング)と遅延バインディング(実行時バインディング)の違いについて解説します。

スポンサーリンク

早期バインディングと遅延バインディングの違い

早期バインディング(事前バインディングと)とは

使用方法:
参照設定から対象のオブジェクトライブラリを追加する

コーディング支援:
VBAエディタ(VBEなど)で補完機能、定数が利用できる

実行速度:
やや速い

バージョン依存性:
高い(異なるバージョンだとエラーになる)

アドイン適正:
推奨されない

遅延バインディング(実行時バインディング)とは

使用方法:
参照設定せず、CreateObjectで呼び出す

コーディング支援:
補完機能はなく、定数も手入力となる

実行速度:
やや遅い

バージョン依存性:
低い(バージョン違いでも基本動作可能)

アドイン適正:
安全に配布できる

アドインについて

アドインとして配布・利用する場合は遅延バインディングが望ましい。

理由:
・たとえばOUTLOOKを操作する場合、「参照設定(早期バインディング)」を使うと、使用者の環境で同じOutlookバージョンがインストールされている必要がある
 異なるバージョンのOutlookを使っているPCでは、「参照が壊れました」エラーになる可能性がある
・アドインは複数の環境で使用されることが多いため、互換性を高めるには「遅延バインディング」が安全である

ExcelVBAでOUTLOOKを操作する場合の例

参照設定を利用する場合(早期バインディング)

Dim my_mail As Outlook.Application 
Set my_mail = New Outlook.Application 
Dim sendobj As Outlook.MailItem 
Set sendobj = my_mail.CreateItem(olMailItem)

参照設定で「Microsoft Outlook ××.0 Object Library」を追加する

参照設定を利用しない場合(遅延バインディング)

Dim my_mail As Object
Set my_mail = CreateObject("Outlook.Application")

Dim sendobj As Object
Set sendobj = my_mail.CreateItem(0) ' 0 は olMailItem を意味します

定数の扱いについて

遅延バインディングでは「olMailItem」などの定数が使えないため、数値で代用する必要がある

定数名:olMailItem ⇒ 値:0

ファイルシステムオブジェクトを利用する場合の例

参照設定を利用する場合

Dim fso As New FileSystemObject

参照設定から「Microsoft Scripting Runtime」にチェックする。

参照設定を利用しない場合

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Dictionary(連想配列)を使用する場合の例

参照設定を利用する場合

Dim myDict As New Scripting.Dictionary

参照設定から「Microsoft Scripting Runtime」にチェックする。

参照設定を利用しない場合

Dim myDict As Object
Set myDict = CreateObject("Scripting.Dictionary")

最後に

今回は普段よく使う外部オブジェクトライブラリの使用方法についてまとめてみました。

コメント一覧

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