他のアプリケーションの機能を使用する場合は、オブジェクト変数のアーリーバインディングとレイトバインディングのどちらを使用するかを決定する必要があります。

早期バインディング

オブジェクト変数とオブジェクトの間のバインドは、アプリケーションのコンパイル時に行われます。

これにより、アプリケーションの実行時にバインディングが行われる場合(遅延バインディング)と比較して、パフォーマンスが向上します。

初期バインディングを作成する場合は、使用する「外部」オブジェクトライブラリへの参照を設定する必要があります。

これは、メニューの[ツール]、[参照…​]を使用してVBEから実行されます。VBProjectにオブジェクトライブラリへの参照がある場合、特定のオブジェクト変数(Dim oDoc As Word.Documentなど)を宣言できます。これにより、「外部オブジェクト」のプログラミングも簡単になります。これは、VBEが、作業元のアプリケーションに属するオブジェクトに対して表示するプロパティ、メソッド、およびイベントに関して同じプログラミングヘルプを表示するためです(VBEは自動的に事前にこのアプリケーションを参照してください)。

これは、vba自動化エラーを示す一般的なコード例です:

Sub OLEAutomationEarlyBinding()

' replace xxx with one of the following:

' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As xxx.Application ' early binding

Dim oDoc As xxx.Document

' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation, Word.Document

On Error Resume Next ' ignore errors

Set oApp = GetObject(, "xxx.Application")

' reference an existing application instance

If oApp Is Nothing Then ' no existing application is running

Set oApp = New xxx.Application ' create a new application instance

End If

On Error GoTo 0 ' resume normal error handling

If oApp Is Nothing Then ' not able to create the application

MsgBox "The application is not available!", vbExclamation

End If

With oApp

.Visible = True ' make the application object visible

' at this point the application is visible

' do something depending on the application...

Set oDoc = .Documents.Open("c:\foldername\filename.doc")

' open a document

'        ...

oDoc.Close True ' close and save the document

.Quit ' close the application

End With

Set oDoc = Nothing ' free memory

Set oApp = Nothing ' free memory

End Sub

遅延バインディング

オブジェクト変数とオブジェクトの間のバインドは、アプリケーションの実行時に行われます。

これにより、アプリケーションのコンパイル時にバインディングが行われる場合(早期バインディング)と比較して、パフォーマンスが低下します。

「外部」アプリケーションに属するオブジェクトライブラリへの参照を追加しない場合は、一般的なオブジェクト変数(Dim oDoc As Objectなど)を宣言する必要があります。これにより、VBEは、作業中のアプリケーションに属するオブジェクトに対して表示されるプロパティ、メソッド、およびイベントに関して同じプログラミングヘルプを表示しないため、「外部オブジェクト」のプログラミングがより困難になります。

これは一般的なコード例です:

Sub OLEAutomationLateBinding()

' replace xxx with one of the following:

' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As Object ' late binding

Dim oDoc As Object ' late binding

On Error Resume Next ' ignore errors

Set oApp = GetObject(, "xxx.Application")

' reference an existing application instance

If oApp Is Nothing Then ' no existing application is running

Set oApp = CreateObject("xxx.Application")

' create a new application instance

End If

On Error GoTo 0 ' resume normal error handling

If oApp Is Nothing Then ' not able to create the application

MsgBox "The application is not available!", vbExclamation

End If

With oApp

.Visible = True ' make the application object visible

' at this point the application is visible

' do something depending on the application...

Set oDoc = .Documents.Open("c:\foldername\filename.doc")

' open a document

'        ...

oDoc.Close True ' close and save the document

.Quit ' close the application

End With

Set oDoc = Nothing ' free memory

Set oApp = Nothing ' free memory

End Sub