アーリーバインディング — これはオブジェクトの型がコンパイル時に既知である方法です。変数を宣言する際に具体的な型を指定します:
Dim app As New Excel.Application ' アーリーバインディング
利点:
レイトバインディング — オブジェクトの型は実行時にのみ決定されます。通常はObjectを通じて使用されます:
Dim app As Object Set app = CreateObject("Excel.Application") app.Visible = True
利点:
レイトバインディングの欠点:
COMオブジェクトを扱う際に、常にレイトバインディングを使用する意味があるか?
回答: いいえ、ターゲットコンピュータ全てで必要なライブラリのバージョンがあるか不明な場合のみです。バージョン管理が安全で、全依存関係が知られている場合は、アーリーバインディングが速く、信頼性が高く、推奨されます。レイトバインディングの不必要な使用はパフォーマンスと静的型付けの操作を悪化させます。
物語
Excelを介した自動レポート作成: レイトバインディングのためにクライアントでのみメソッド名のエラーが発見され、マクロが「壊れた」時(
app.WorkbooksOpenのタイプミスがapp.Workbooks.Openだった)。アーリーバインディングを使用していれば、エラーはすぐに明らかになったでしょう。
物語
古いバージョンから新しいWordライブラリに移行する際、アプリケーションが例外を投げ始め、新しいフィールドがサポートされていませんでした。アーリーバインディングが更新をブロックし、レイトバインディングに移行せざるを得なかったが、一部の機能はシグネチャの不一致により動作しなくなりました。
物語
完成したライブラリがプロダクションに配信されましたが、必要なCOM依存関係を忘れていました。アーリーバインディングの場合、プロジェクトは全く起動せず(登録エラー)、レイトバインディングの場合は動作しましたが、オブジェクトの各呼び出しで「落ち」、追加のログを要求しました。