Share via


オートメーションを使用して作成したオブジェクトを無効にする

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

通常、ローカル変数は、宣言されたプロシージャが終了した時点で無効になります。ただし、ほかのアプリケーションの自動化に使用するアプリケーション レベルのオブジェクト変数を Nothing キーワードを使用して明示的に無効にする方法は、プログラミングを行う上で推奨される手段です。この方法を使用することにより、変数が使用した残りのメモリが解放されます。オブジェクト変数を完全に無効にし、使用メモリを空にする場合、Quit メソッドを使用する必要のある Application オブジェクトもあります。通常、Quit メソッドを使用して、オブジェクト変数が Nothing キーワードと同等になるように設定すると、確実にオブジェクト変数を無効にできます。

メモ   OfficeBinder オブジェクトの場合、Quit メソッドの代わりに Close メソッドを使用し、オブジェクト変数を Nothing キーワードと同等に設定してください。

アプリケーション レベルのオブジェクト変数を無効にする例は、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH04 サブフォルダに含まれる Automating&IDE.doc の modSetObjVariable モジュールで CreateExcelObjects および CreateOutlookMail プロシージャを参照してください。

実行中のアプリケーションのインスタンスを終了する前に、このインスタンスがコードによって起動されたかどうかを確認する場合があります。通常、Application オブジェクトの UserControl プロパティを検査して、現在のインスタンスがコードによって開かれたかどうかを調べることができます。ただし、コードの実行により UserControl プロパティ値が False から True **** に変わる場合があります。たとえば、オートメーションを使用して Excel を起動および表示し、セルへの入力など、ユーザーによる操作が実行されたとき、インスタンスがコードによって開始した場合でも UserControl プロパティは True を返します。この状況を制御するには、Application オブジェクトのインスタンスを作成した直後に UserControl プロパティの変数を割り当て、この変数を使用して、アプリケーションを閉じる前に UserControl プロパティの値をテストします。次の例を参照してください。

  Sub GetObjectXL()
   Dim xlApp               As Excel.Application
   Dim blnUserControl      As Boolean
   
   Const ERR_APP_NOTRUNNING As Long = 429
   
   ' 既定値として blnUserControl を True に設定します。
   blnUserControl = True
   On Error Resume Next
   ' Excel の現在のインスタンスを開きます。
   Set xlApp = GetObject(, "Excel.Application")
   ' インスタンスがない場合は新しいインスタンスを作成します。
   If Err = ERR_APP_NOTRUNNING Then
      Set xlApp = New Excel.Application
      ' UserControl プロパティを現在の状態で保存します。
      blnUserControl = xlApp.UserControl
   End If
   With xlApp
      ' Excel を自動化するコードをここに挿入します。
      ' UserControl プロパティの元の値を確認します。
      If blnUserControl = False Then
         xlApp.Quit
         Set xlApp = Nothing
      End If
   End With
End Sub

GetObjectXL プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH04 サブフォルダに含まれる Automating&IDE.doc の modSetObjVariable モジュールにあります。

メモ   PowerPoint、Outlook および FrontPage には、Application オブジェクトのインスタンスがユーザーまたはプログラムのいずれによって開始されたかを検出する方法はありません。Word で UserControl プロパティがどのように機能するかについては、この章の「起動コードを含む文書を使用する」を参照してください。