オブジェクトライブラリのプロキシとしてクラスモジュールを作成できます---他のプロシージャに必要なすべてのメソッド、プロパティ、および定数をラップします。
これらのプロシージャはすべて同じ方法でプロキシクラスを使用するため、アーリーバインディングとレイトバインディングを切り替えるためにこれらのプロシージャを修正する必要はありません。また、Intellisenseは、プロキシクラスで公開するすべてのものを表示します。
このクラスは、アーリーバインディングとレイトバインディングを切り替えるための単一の制御ポイントになります。一例としてExcelについて言及しました。
#Const DevStatus = "PROD"
#If DevStatus = "DEV" Then
Private objApp As Excel.Application
Private objBook As Excel.Workbook
Private objSheet As Excel.Worksheet
#Else 'assume PROD
Private objApp As Object
Private objBook As Object
Private objSheet As Object
#End If
Excelがどのユーザーのマシンにもインストールされていない可能性がある場合は、クラスの初期化中にその可用性を確認できます。
Dim blnExcelAvailable As Boolean
Private Sub Class_Initialize()
blnExcelAvailable = IsExcelAvailable()
End Sub
Private Function IsExcelAvailable() As Boolean
Dim blnReturn As Boolean
Dim objTest As Object
On Error GoTo ErrorHandler
Set objTest = CreateObject("Excel.Application")
blnReturn = True
ExitHere:
On Error GoTo 0
Set objTest = Nothing
IsExcelAvailable = blnReturn
Exit Function
ErrorHandler:
blnReturn = False
GoTo ExitHere
End Function
次に、プロキシクラスを使用するプロシージャは、プロパティをチェックして、Excelが使用可能かどうかを確認できます。
Public Property Get ExcelAvailable() As Boolean
ExcelAvailable = blnExcelAvailable
End Property
このアプローチは可能であり、AFAICTの要件を満たしていると思います。しかし、それが合理的かどうかはわかりません。Excelの例に戻ると、オブジェクトモデルの管理可能なサブセットに対してこのようなことを行うことができます。しかし、そのメソッド、プロパティ、および定数のすべてまたはほとんどが必要な場合、プロキシクラスは大きな仕事になります。
個人的には、このアプローチは使用しません。mwolfe02およびJPのように、アーリー/レイトバインディングを管理するのは私にとってそれほど手間がかかりません。説明された。しかし、私の印象では、これはあなたの状況ではより負担が大きいので、おそらくあなたは私がこのようなものにいるよりも多くの努力を投資することをいとわないでしょう。