現在オフラインです。再接続するためにインターネットの接続を待っています

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

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

この記事は、以前は次の ID で公開されていました: JP302896
Microsoft Visual C# .NET については、次の資料を参照してください。302901
Microsoft Visual Basic 6.0 については、次の資料を参照してください。238228
Microsoft Visual C++ 6.0 については、次の資料を参照してください。230689

この資料の内容

概要
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 サイトを参照してください。(c) Microsoft Corporation 2001, All Rights Reserved. Contributions by Ranjit R. Sawant, Microsoft Corporation.

先頭に戻る
xl2003 ol2003 ppt2003 wd2003 Addin add in add-in ins add-ins comaddin comadd-in
プロパティ

文書番号:302896 - 最終更新日: 12/25/2006 09:06:39 - リビジョン: 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
フィードバック