チュートリアル: Visual Basic プロジェクトのコードを VBA から呼び出す
このチュートリアルでは、ドキュメント内の Visual Basic for Applications (VBA) コードから Microsoft Office Word 用のドキュメント レベルのカスタマイズ内のメソッドを呼び出す方法を示します。 このプロシージャには次の 3 つの基本的な手順が含まれます。 ThisDocument
ホスト項目クラスにメソッドを追加する、VBA コードにメソッドを公開する、および、ドキュメント内の VBA コードからメソッドを呼び出す、の 3 つです。
適用対象: このトピックの情報は、Excel および Word のドキュメント レベルのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。
このチュートリアルでは具体的には Word を使用していますが、チュートリアルで示されるコンセプトは Excel のドキュメント レベルのプロジェクトにも適用されます。
このチュートリアルでは、次の作業について説明します。
VBA コードが含まれるドキュメントを作成する。
Word のセキュリティ センターを使用して、ドキュメントの場所を信頼する。
ThisDocument
ホスト項目クラスにメソッドを追加する。VBA コードにメソッドを公開する。
VBA コードからメソッドを呼び出す。
Note
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
前提条件
このチュートリアルを実行するには、次のコンポーネントが必要です。
Microsoft Office Developer Tools が含まれている Visual Studio のエディション。 詳細については、「Office ソリューションを開発できるようにコンピューターを構成する」を参照してください。
Microsoft Word
VBA コードが含まれるドキュメントを作成する
最初の手順では、単純な VBA マクロを含むマクロ対応のドキュメントを作成します。 そのドキュメントに基づいた Visual Studio プロジェクトを作成する前に、ドキュメントに VBA プロジェクトを含める必要があります。 含めないと、Visual Studio は VBA プロジェクトを変更して、VBA コードがカスタマイズ アセンブリを呼び出せるようにすることができません。
使用する VBA コードを含むドキュメントが既にある場合は、この手順を省略できます。
VBA コードが含まれるドキュメントを作成するには
Word を起動します。
作業中のドキュメントを DocumentWithVBA という名前で、Word のマクロ有効文書 (*.docm) として保存します。 このブックは、デスクトップなどの便利な場所に保存します。
リボンの [開発] タブをクリックします。
Note
[開発] タブが表示されていない場合は、最初にこれを表示する必要があります。 詳しくは、「方法: [開発] タブをリボンに表示する」をご覧ください。
[コード] グループの [Visual Basic]をクリックします。
Visual Basic エディターが開きます。
[プロジェクト] ウィンドウで、 [ThisDocument]をダブルクリックします。
ThisDocument
オブジェクトのコード ファイルが開きます。コード ファイルに次の VBA コードを追加します。 このコードは何も実行しない単純な関数を定義します。 この関数の唯一の目的は、VBA プロジェクトがドキュメント内に確実に存在するようにすることです。 これは、このチュートリアルの後の手順に必要です。
Sub EmptySub() End Sub
ドキュメントを保存して、Word を終了します。
プロジェクトを作成する
これで、先ほど作成したマクロ対応のドキュメントを使用する、Word のドキュメント レベルのプロジェクトを作成できます。
新しいプロジェクトを作成するには
Visual Studio を起動します。
[ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。 IDE が Visual Basic 開発設定を使用するように設定されている場合は、 [ファイル] メニューの [新しいプロジェクト]をクリックします。
テンプレート ウィンドウで、 [Visual Basic]を展開してから、 [Office/SharePoint]を展開します。
[Office アドイン] ノードを選択します。
プロジェクト テンプレートのリストで、 [Word 2010 ドキュメント] または [Word 2013 ドキュメント] プロジェクトを選択します。
[名前] ボックスに、 「CallingCodeFromVBA」と入力します。
OK をクリックします。
Visual Studio Tools for Office プロジェクト ウィザード が開きます。
[既存のドキュメントをコピーする]を選択し、 [既存のドキュメントの完全なパス] ボックスで、先ほど作成した DocumentWithVBA ドキュメントの場所を指定します。 独自のマクロ対応ドキュメントを使用している場合は、代わりにそのドキュメントの場所を指定します。
[完了] をクリックします。
Visual Studio はデザイナーで DocumentWithVBA ドキュメントを開き、ソリューション エクスプローラーに CallingCodeFromVBA プロジェクトを追加します。
ドキュメントの場所を信頼する
ソリューションのコードをドキュメント内の VBA コードに公開する前に、実行するドキュメント内の VBA を信頼する必要があります。 これを実行するには、いくつかの方法があります。 このチュートリアルでは、Word の セキュリティ センター で、ドキュメントの場所を信頼します。
ドキュメントの場所を信頼するには
Word を起動します。
[ファイル] タブをクリックします。
[Word のオプション] ボタンをクリックします。
[カテゴリ] ウィンドウで [セキュリティ センター]をクリックします。
詳細ウィンドウで [セキュリティ センターの設定]をクリックします。
[カテゴリ] ウィンドウで [信頼できる場所]をクリックします。
詳細ウィンドウで [新しい場所の追加]をクリックします。
[Microsoft Office の信頼できる場所] ダイアログ ボックスで、 CallingCodeFromVBA プロジェクトを含むフォルダーを参照します。
[この場所のサブフォルダも信頼する]を選択します。
[Microsoft Office の信頼できる場所] ダイアログ ボックスで、 [OK]をクリックします。
[セキュリティ センター] ダイアログ ボックスで [OK]をクリックします。
[Word のオプション] ダイアログ ボックスで [OK]をクリックします。
Word を終了します。
ThisDocument クラスにメソッドを追加する
VBA プロジェクトのセットアップができたので、今度は VBA コードから呼び出すことのできる ThisDocument
ホスト項目クラスにメソッドを追加します。
ThisDocument クラスにメソッドを追加するには
ソリューション エクスプローラーで ThisDocument.vbを右クリックし、 [コードの表示]をクリックします。
コード エディターで ThisDocument ファイルが開きます。
次のメソッドを
ThisDocument
クラスに追加します。 このメソッドは、ドキュメントの先頭に 2 行 2 列の表を作成します。 パラメーターは、最初の行に表示されるテキストを指定します。 このチュートリアルの後半では、ドキュメント内の VBA コードからこのメソッドを呼び出します。Public Sub CreateTable(ByVal firstColumnHeader As String, _ ByVal secondColumnHeader As String) Me.Paragraphs(1).Range.InsertParagraphBefore() Dim table1 As Word.Table = Me.Tables.Add(Me.Paragraphs(1).Range, 2, 2) With table1 .Style = "Table Professional" .Cell(1, 1).Range.Text = firstColumnHeader .Cell(1, 2).Range.Text = secondColumnHeader End With End Sub
プロジェクトをビルドします。
メソッドを VBA コードに公開する
CreateTable
メソッドをドキュメント内の VBA コードに公開するには、 ホスト項目の EnableVbaCallers ThisDocument
プロパティを Trueに設定します。
メソッドを VBA コードに公開するには
ソリューション エクスプローラーで、 ThisDocument.vbをダブルクリックします。
デザイナーで DocumentWithVBA ファイルが開きます。
[プロパティ] ウィンドウで、 EnableVbaCallers プロパティを選択し、値を Trueに変更します。
表示されるメッセージで [OK] をクリックします。
プロジェクトをビルドします。
VBA コードからメソッドを呼び出す
これで、ドキュメント内の VBA コードから CreateTable
メソッドを呼び出せます。
Note
このチュートリアルでは、プロジェクトのデバッグ中に VBA コードをドキュメントに追加します。 Visual Studio はビルド出力フォルダー内のドキュメントをメイン プロジェクト フォルダーからのドキュメントのコピーで置き換えるので、このドキュメントに追加したすべての VBA コードは次にプロジェクトをビルドすると上書きされます。 VBA コードを保存したい場合は、プロジェクト フォルダー内のドキュメントにコピーします。 詳細については、「VBA とドキュメントレベルのカスタマイズを結合する」を参照してください。
VBA コードからメソッドを呼び出すには
F5 キーを押してプロジェクトを実行します。
[開発者] タブで、 [コード] グループの、 [Visual Basic]をクリックします。
Visual Basic エディターが開きます。
[挿入] メニューで [モジュール]をクリックします。
次のコードを新しいモジュールに追加します。
このコードはカスタマイズ アセンブリの
CreateTable
メソッドを呼び出します。 マクロはCallVSTOAssembly
オブジェクトのThisDocument
プロパティを使用して、このメソッドにアクセスします。 このプロパティは、このチュートリアルで先ほど EnableVbaCallers プロパティを設定したときに自動的に生成されたものです。Sub CreateTable() Call ThisDocument.CallVSTOAssembly.CreateTable("Employee Name", "Start Date") End Sub
F5 キーを押します。
新しい表がドキュメントに追加されたことを確認します。
変更を保存せずに Word を終了します。
次のステップ
Office ソリューションでの VBA からのコード呼び出しについて詳しくは、次のトピックを参照してください。
VBA から Visual C# カスタマイズのコードを呼び出します。 このプロセスは、Visual Basic のプロセスとは異なります。 詳細については、「チュートリアル: Visual C# プロジェクトのコードを VBA から呼び出す」を参照してください。
VBA から VSTO アドインのコードを呼び出します。 詳細については、「チュートリアル: VSTO アドイン内のコードを VBA から呼び出す」を参照してください。