Microsoft ExcelでVBAを使用してOLEオートメーションの基本情報
他のアプリケーションの機能を使用する場合は、オブジェクト変数のアーリーバインディングとレイトバインディングのどちらを使用するかを決定する必要があります。
早期バインディング
オブジェクト変数とオブジェクトの間のバインドは、アプリケーションのコンパイル時に行われます。
これにより、アプリケーションの実行時にバインディングが行われる場合(遅延バインディング)と比較して、パフォーマンスが向上します。
初期バインディングを作成する場合は、使用する「外部」オブジェクトライブラリへの参照を設定する必要があります。
これは、メニューの[ツール]、[参照…]を使用して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