Visual Basic .NET を使用して Office COM アドインを作成する方法

文書翻訳 文書翻訳
文書番号: 302896 - 対象製品
この記事は、以前は次の ID で公開されていました: JP302896
すべて展開する | すべて折りたたむ

目次

概要

Microsoft Office 2000 以降では、Office アプリケーションを拡張したり制御したりするアプリケーション アドインを作成するための、統一された新しいデザイン アーキテクチャがサポートされています。このようなアドインは COM アドインと呼ばれます。この資料では、Office COM アドインの概要と、Microsoft Visual Basic .NET を使用して Office COM アドインを作成する方法について説明します。

IDTExtensibility2 インターフェイス

COM アドインは、IDTExtensibility2 インターフェイスを実装するインプロセス COM サーバー、つまり ActiveX ダイナミック リンク ライブラリ (DLL) です。IDTExtensibility2 インターフェイスは、Microsoft アドイン デザイナ タイプ ライブラリ (Msaddndr.dll) に記述されています。すべての COM アドインは、このインターフェイスを継承します。アドインには、このインターフェイスの 5 つのメソッドをそれぞれ実装する必要があります。

OnConnection

OnConnection イベントは、COM アドインの接続時に発生します。アドインの接続は、起動時に行われるか、エンド ユーザーによって行われるか、またはオートメーションを介して行われます。OnConnection が正常に実行された場合、アドインは読み込まれたと見なされます。エラー メッセージが返された場合、ホスト アプリケーションはすぐにアドインへの参照を解放し、オブジェクトは破棄されます。

OnConnection は、次の 4 つのパラメータを取ります。
  • Application - ホスト アプリケーション オブジェクトへの参照。
  • ConnectMode - アドインの接続方法を示す定数。アドインの接続方法は次のいずれかです。
    • ext_cm_AfterStartup - エンド ユーザーによって [COM アドイン] ダイアログ ボックスからアドインが起動されました。
    • ext_cm_CommandLine - コマンド ラインからアドインが接続されました。これは Office アプリケーションの COM アドインの作成では使用しません。
    • ext_cm_External - 外部アプリケーションによってオートメーションを使用してアドインが接続されました。これは Office アプリケーションの COM アドインの作成では使用しません。
    • ext_cm_Startup - アドインは、アプリケーションの起動時にホストによって読み込まれました。この動作はレジストリの設定によって制御されます。
  • AddInInst - ホスト アプリケーションの COMAddIns コレクション内の、このアドインを参照する COMAddIn オブジェクトへの参照。
  • Custom - ユーザー定義のデータを保持する Variant 型の配列。

OnDisconnection

OnDisconnection イベントは、COM アドインの接続が切断され、メモリからアンロードされる直前に発生します。アドインでは、このイベントに応答してリソースのクリーンアップを実行し、ホスト アプリケーションに加えられた変更を復元する必要があります。

OnDisconnection は、次の 2 つのパラメータを取ります。
  • RemoveMode - アドインの切断方法を示す定数。アドインの切断方法は次のいずれかです。
    • ext_dm_HostShutdown - ホスト アプリケーションの終了時にアドインが切断されました。
    • ext_dm_UserClosed - エンド ユーザーまたはオートメーション コントローラによってアドインが切断されました。
  • Custom - ユーザー定義のデータを保持する Variant 型の配列。

OnAddInsUpdate

OnAddInsUpdate イベントは、登録済みの COM アドインのセットが変更されたときに発生します。つまり、COM アドインがホスト アプリケーションにインストールされたり、ホスト アプリケーションから削除されたりするたびに、このイベントが発生します。

OnStartupComplete および OnBeginShutdown

ホスト アプリケーションがメモリにロードされるまで、またはメモリからアンロードされるときは、ユーザーの操作を無効にする必要があります。OnStartupComplete および OnBeginShutdown メソッドは、ホスト アプリケーションがこのような状態から復帰したとき、またはこのような状態に入るときに呼び出されます。OnStartupComplete は、アドインへの接続が起動時に行われた場合にのみ呼び出されます。OnBeginShutdown は、アドインの切断がホストの終了時に行われる場合にのみ呼び出されます。

これらのイベントの発生時には、ホスト アプリケーションのユーザー インターフェイスは完全に機能しています。アクションによっては OnConnection や OnDisconnection からは利用できないことがあり、これらのイベントで実行する以外に方法がない場合があります。

COM アドインの登録

COM アドインでは、通常の COM の登録手順に加え、対象となる各 Office アプリケーションにアドイン自身を登録する必要があります。特定のアプリケーションにアドインを登録するには、次の場所にサブキーを作成する必要があります。このとき、アドインの ProgID をキーの名前として使用します。
HKEY_CURRENT_USER\Software\Microsoft\Office\OfficeApp\Addins\ProgID
このキーに値を追加して、アドインのわかりやすい表示名と詳しい説明を設定できます。さらに、LoadBehavior という DWORD 値を使用して、アドインのロード方法を指定する必要があります。この値はホスト アプリケーションによるアドインのロード方法を決定するもので、次の値の組み合わせです。
  • 0 = Disconnect - ロードしない。
  • 1 = Connected - ロードする。
  • 2 = Bootload - アプリケーションの起動時にロードする。
  • 8 = DemandLoad - ユーザーの要求があったときにのみロードする。
  • 16 = ConnectFirstTime - 1 回のみ (次回の起動時に) ロードする。
通常は 0x03 (Connected | Bootload) を指定します。

また、IDTExtensibility2 を実装するアドインでは、ユーザー インターフェイスをサポートしない操作に対応しているかどうかを示すために、CommandLineSafe という DWORD 値を指定する必要もあります。値が 0x00 の場合は False、0x01 の場合は True を表します。

Visual Basic .NET を使用して COM アドインを作成する方法

前述のとおり、Office COM アドインはインプロセス COM サーバーであり、Office アプリケーションから COM ランタイム レイヤを介してアクティブ化されます。したがって、Visual Basic .NET で COM アドインを開発する場合は、.NET でアドイン コンポーネントを実装した後、COM の相互運用レイヤを介して COM クライアント (つまり Office アプリケーション) に公開する必要があります。

Visual Basic .NET で COM アドインを作成するには、次の手順を実行します。
  1. Visual Basic .NET でクラス ライブラリ プロジェクトを作成します。
  2. IDTExtensibility2 が実装されているタイプ ライブラリへの参照を追加します。このタイプ ライブラリには、Extensibility という名前でプライマリ相互運用機能アセンブリが用意されています。
  3. Microsoft Office オブジェクト ライブラリへの参照を追加します。このタイプ ライブラリには、Office という名前でプライマリ相互運用機能アセンブリが用意されています。
  4. クラス ライブラリに、IDTExtensibility2 を実装するパブリック クラスを作成します。
  5. クラス ライブラリをビルドした後、ライブラリを COM の相互運用機能に登録します。これを行うには、このクラス ライブラリに対応する、厳密な名前を付けたアセンブリを生成し、それを COM の相互運用機能に登録します。Regasm.exe を使用して、.NET コンポーネントを COM の相互運用機能に登録できます。
  6. Office アプリケーションでアドインが認識されてロードされるように、レジストリ エントリを作成します。
これらの手順をすべて手動で完了することもできますが、共有アドインという種類の .NET プロジェクトを作成する方法もあります。共有アドイン プロジェクトを作成すると、.NET での COM アドインの作成を支援する機能拡張ウィザードが起動します。

機能拡張ウィザードでは、Visual Basic .NET のクラス ライブラリ プロジェクトが作成され、IDTExtensibility2 インターフェイスを実装する Connect クラスが用意されます。IDTExtensibility の各メンバを空の状態で実装したスケルトン コードも生成されます。このプロジェクトには、Extensibility および Office アセンブリへの参照が追加されます。プロジェクトのビルド設定では、[COM 相互運用機能の登録] が True になっています。また、アセンブリ キー (.snk) ファイルが生成され、Assemblyinfo.vb の AssemblyKeyfile 属性から参照されます。

ウィザードでは、クラス ライブラリ プロジェクトと共に、COM アドインを別のコンピュータに展開するときに使用できるセットアップ プロジェクトも生成されます。セットアップ プロジェクトは必要に応じて削除できます。

手順例

  1. Visual Studio .NET で、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  2. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] の下の [その他のプロジェクト] を展開し、[機能拡張プロジェクト] をクリックします。次に、[共有アドイン] テンプレートをクリックします。
  3. アドインの名前として MyCOMAddin と入力し、[OK] をクリックします。
  4. 機能拡張ウィザードが表示されたら、次の手順を実行します。
    1. ページ 1 で [Visual Basic を使用してアドインを作成] をクリックし、[次へ] をクリックします。
    2. ページ 2 で以下のホスト アプリケーションを選択し、[次へ] をクリックします。
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. ページ 3 でアドインの名前と説明を入力し、[次へ] をクリックします。

      : アドインの名前と説明は、Office アプリケーションの [COM アドイン] ダイアログ ボックスに表示されます。

    4. ページ 4 で選択できるオプションをすべてオンにし、[次へ] をクリックします。
    5. [完了] をクリックします。
  5. Connect クラスに次のメンバを追加します。
    Dim WithEvents MyButton As CommandBarButton 
  6. 次のように、IDTExtensibility2 の各メンバに対応するコードを Connect クラスに実装します。
        Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
            On Error Resume Next
            ' Notify the user you are shutting down, and delete the button.
            MsgBox("Our custom Add-in is unloading.")
            MyButton.Delete()
            MyButton = Nothing
    
        End Sub
    
        Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
            '
        End Sub
    
        Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
    
            Dim oCommandBars As CommandBars
            Dim oStandardBar As CommandBar
    
            On Error Resume Next
            ' Set up a custom button on the "Standard" command bar.
            oCommandBars = applicationObject.CommandBars
            If oCommandBars Is Nothing Then
                ' Outlook has the CommandBars collection on the Explorer object.
                oCommandBars = applicationObject.ActiveExplorer.CommandBars
            End If
    
            oStandardBar = oCommandBars.Item("Standard")
            If oStandardBar Is Nothing Then
                ' Access names its main toolbar Database.
    
                oStandardBar = oCommandBars.Item("Database")
    
            End If
    
            ' In case the button was not deleted, use the exiting one.
            MyButton = oStandardBar.Controls.Item("My Custom Button")
            If MyButton Is Nothing Then
    
                MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                    .Caption = "My Custom Button"
                    .Style = MsoButtonStyle.msoButtonCaption
    
                    ' The following items are optional, but recommended. 
                    ' The Tag property lets you quickly find the control 
                    ' and helps MSO keep track of it when more than
                    ' one application window is visible. The property is required
                    ' by some Office applications and should be provided.
    
                    .Tag = "My Custom Button"
    
                    ' The OnAction property is optional but recommended. 
                    ' It should be set to the ProgID of the add-in, so that if
                    ' the add-in is not loaded when a user clicks the button,
                    ' MSO loads the add-in automatically and then raises
                    ' the Click event for the add-in to handle. 
    
                    .OnAction = "!<MyCOMAddin.Connect>"
    
                    .Visible = True
                End With
            End If
    
            ' Display a simple message to show which application you started in.
            MsgBox("Started in " & applicationObject.Name & ".")
    
    
            oStandardBar = Nothing
            oCommandBars = Nothing
    
    
        End Sub
    
        Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
    
            On Error Resume Next
            If RemoveMode <> Extensibility.ext_DisconnectMode.ext_dm_HostShutdown Then _
               Call OnBeginShutdown(custom)
    
            applicationObject = Nothing
    
    
        End Sub
    
        Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
    
    
            MsgBox("On Connection In MyAddin")
            applicationObject = application
            addInInstance = addInInst
    
    
            ' If you aren't in startup, manually call OnStartupComplete.
            If (connectMode <> Extensibility.ext_ConnectMode.ext_cm_Startup) Then _
               Call OnStartupComplete(custom)
    
        End Sub
    
    
        Private Sub MyButton_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles MyButton.Click
            MsgBox("Our CommandBar button was pressed!")
        End Sub
    					
  7. COM アドインをビルドしてテストします。これを行うには、次の手順を実行します。
    1. [ビルド] メニューの [MyCOMAddin のビルド] をクリックします。COM アドインをビルドすると、COM の相互運用機能に .NET クラスが登録されます。
    2. アドインのホスト アプリケーションとして選択した Office アプリケーションのいずれか (たとえば Word または Excel) を起動します。
    3. アドインが起動すると OnConnection イベントが発生し、メッセージ ボックスが表示されます。メッセージ ボックスを閉じると OnStartupComplete イベントが発生し、2 つ目のメッセージ ボックスが表示されます。メッセージ ボックスを閉じます。
    4. アドインにより、標準のツール バーに "My Custom Button" というキャプションのカスタム ボタンが追加されます。
    5. [My Custom Button] をクリックします。アドインでボタンの Click イベントが処理され、メッセージ ボックスが表示されます。メッセージ ボックスを閉じます。
    6. Office アプリケーションを終了します。
    7. アプリケーションの終了時に OnBeginShutDown イベントが発生し、メッセージ ボックスが表示されます。メッセージ ボックスを閉じてデモを終了します。

関連情報

COM アドインの作成の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
190253 [INFO] VB5 で VB6 デザイナが機能しない
Microsoft Internet Explorer 用の Web ベース ソリューションの開発に関する詳細については、以下のマイクロソフト Web サイトを参照してください。
http://www.microsoft.com/japan/msdn/ie/

http://support.microsoft.com/iep
(c) Microsoft Corporation 2001, All Rights Reserved. Contributions by Ranjit R. Sawant, Microsoft Corporation.

プロパティ

文書番号: 302896 - 最終更新日: 2006年12月25日 - リビジョン: 11.1
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002
キーワード:?
kbautomation kbhowtomaster KB302896
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com