チュートリアル : アプリケーション レベルのアドインのコードを VBA から呼び出す
このチュートリアルでは、アプリケーション レベルのアドインのオブジェクトを Visual Basic for Applications (VBA) アドインや COM アドインなど、他の Microsoft Office ソリューションに公開する方法について説明します。
対象: このトピックの情報は、Microsoft Office 2013 および Microsoft Office 2010 のアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは Excel を使用しますが、ここで説明する概念は Visual Studio で提供されるすべてのアドイン プロジェクト テンプレートに当てはまります。
このチュートリアルでは、次の作業について説明します。
他の Office ソリューションに公開できるクラスを定義する。
定義したクラスを他の Office ソリューションに公開する。
公開したクラスのメソッドを VBA から呼び出す。
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office Developer Tools が含まれているエディションの Visual Studio 2012。詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.110\).md)」を参照してください。
- Excel 2013 または Excel 2010。
このトピックのビデオ版については、「Video How to: Calling Code in an Application-Level Add-in from VBA (ビデオ デモ: VBA からのアプリケーション レベルのアドインのコードの呼び出し)」を参照してください。
アドイン プロジェクトの作成
まず、Excel 用のアドイン プロジェクトを作成します。
新しいプロジェクトを作成するには
Excel アドイン プロジェクト テンプレートを使用して、ExcelImportData という名前の Excel アドイン プロジェクトを作成します。詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
Visual Studio によって、ThisAddIn.cs コード ファイルまたは ThisAddIn.vb コード ファイルが開き、ソリューション エクスプローラーに ExcelImportData プロジェクトが追加されます。
他の Office ソリューションに公開できるクラスを定義する
このチュートリアルの目的は、アドインの AddInUtilities というクラスの ImportData メソッドを VBA コードから呼び出すことです。このメソッドは、アクティブなワークシートのセル A1 に文字列を書き込みます。
AddInUtilities クラスを他の Office ソリューションに公開するためには、このクラスをパブリックにし、COM から参照できるようにする必要があります。このクラスの IDispatch インターフェイスも公開する必要があります。次の手順で示すコードでは、これらの要件を満たす方法の 1 つを示します。詳細については、「他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し」を参照してください。
他の Office ソリューションに公開できるクラスを定義するには
[プロジェクト] メニューの [クラスの追加] を選択します。
[新しい項目の追加] ダイアログ ボックスで、新しいクラスの名前を AddInUtilities に変更し、[追加] をクリックします。
コード エディターで AddInUtilities.cs ファイルまたは AddInUtilities.vb ファイルが開きます。
ファイルの先頭に次のステートメントを追加します。
Imports System.Data Imports System.Runtime.InteropServices Imports Excel = Microsoft.Office.Interop.Excel
using System.Data; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel;
AddInUtilities クラスを次のコードで置き換えます。
<ComVisible(True)> _ Public Interface IAddInUtilities Sub ImportData() End Interface <ComVisible(True)> _ <ClassInterface(ClassInterfaceType.None)> _ Public Class AddInUtilities Implements IAddInUtilities ' This method tries to write a string to cell A1 in the active worksheet. Public Sub ImportData() Implements IAddInUtilities.ImportData Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet If activeWorksheet IsNot Nothing Then Dim range1 As Excel.Range = activeWorksheet.Range("A1") range1.Value2 = "This is my data" End If End Sub End Class
[ComVisible(true)] public interface IAddInUtilities { void ImportData(); } [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] public class AddInUtilities : IAddInUtilities { // This method tries to write a string to cell A1 in the active worksheet. public void ImportData() { Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet; if (activeWorksheet != null) { Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing); range1.Value2 = "This is my data"; } } }
このコードは、AddInUtilities クラスを COM から参照できるようにし、このクラスに ImportData メソッドを追加します。また、AddInUtilities クラスは IDispatch インターフェイスを公開するために ClassInterfaceAttribute 属性を持ち、COM から参照できるインターフェイスを実装します。
定義したクラスを他の Office ソリューションに公開する
AddInUtilities クラスを他の Office ソリューションに公開するには、ThisAddIn クラスの RequestComAddInAutomationService メソッドをオーバーライドします。オーバーライドでは、AddInUtilities クラスのインスタンスを返します。
AddInUtilities クラスを他の Office ソリューションに公開するには
ソリューション エクスプローラーで、[Excel] を展開します。
ThisAddIn.cs または ThisAddIn.vb を右クリックし、[コードの表示] をクリックします。
ThisAddIn クラスに次のコードを追加します。
Private utilities As AddInUtilities Protected Overrides Function RequestComAddInAutomationService() As Object If utilities Is Nothing Then utilities = New AddInUtilities() End If Return utilities End Function
private AddInUtilities utilities; protected override object RequestComAddInAutomationService() { if (utilities == null) utilities = new AddInUtilities(); return utilities; }
[ビルド] メニューの [ソリューションのビルド] をクリックします。
ソリューションがエラーなしでビルドされることを確認します。
アドインのテスト
AddInUtilities クラスをさまざまな種類の Office ソリューションから呼び出すことができます。このチュートリアルでは、Excel ブック内の VBA コードを使用します。使用できる他の Office ソリューションの詳細については、「他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し」を参照してください。
アドインをテストするには
F5 キーを押してプロジェクトを実行します。
Excel で、アクティブ ブックを Excel マクロ有効ブック (*.xlsm) として保存します。このブックは、デスクトップなどの便利な場所に置きます。
リボンの [開発] タブをクリックします。
[!メモ]
[開発] タブが表示されていない場合は、最初にこれを表示する必要があります。詳細については、「方法 : [開発] タブをリボンに表示する」を参照してください。
[コード] グループの [Visual Basic] をクリックします。
Visual Basic エディターが開きます。
[プロジェクト] ウィンドウの [ThisWorkbook] をダブルクリックします。
ThisWorkbook オブジェクトのコード ファイルが開きます。
コード ファイルに次の VBA コードを追加します。このコードは、まず ExcelImportData アドインを表す COMAddIn オブジェクトを取得します。次に、COMAddIn オブジェクトの Object プロパティを使用して ImportData メソッドを呼び出します。
Sub CallVSTOMethod() Dim addIn As COMAddIn Dim automationObject As Object Set addIn = Application.COMAddIns("ExcelImportData") Set automationObject = addIn.Object automationObject.ImportData End Sub
F5 キーを押します。
新しい Imported Data シートがブックに追加されていることを確認します。セル A1 に文字列 This is my data があることも確認してください。
Excel を終了します。
次の手順
アドインのプログラミングの詳細については、次の各トピックを参照してください。
ThisAddIn クラスを使用してホスト アプリケーションを自動化し、アドイン プロジェクトの他のタスクを実行する。詳細については、「アプリケーション レベルのアドインのプログラミング」を参照してください。
アドインにカスタム作業ウィンドウを作成する。詳細については、「カスタム作業ウィンドウ」および「方法 : カスタム作業ウィンドウをアプリケーションに追加する」を参照してください。
アドインでリボンをカスタマイズする。詳細については、「リボンの概要」および「方法 : リボンのカスタマイズの概要」を参照してください。
参照
処理手順
方法: Visual Studio で Office プロジェクトを作成する
概念
他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し