チュートリアル: Visual Basic の Office プログラミング

Visual Studio には、Microsoft Office のプログラミングを改善する Visual Basic の新機能が導入されています。 Visual Basic の機能には、自動実装プロパティ、ラムダ式内のステートメント、コレクション初期化子などがあります。 COM コンポーネントとやり取りするアセンブリの配置を可能にする型情報を、ユーザーのコンピューターにプライマリ相互運用機能アセンブリ (PIA) を配置することなく、埋め込むことができます。 詳細については、「チュートリアル:マネージド アセンブリからの型の埋め込み」をご覧ください。

このチュートリアルでは、Office プログラミングのコンテキストで機能を示しますが、これらの機能の多くは一般的なプログラミングにも便利です。 このチュートリアルでは、Excel ブックを作成する Excel アドイン アプリケーションを使用します。 次に、ブックへのリンクを含む Word 文書を作成します。 最後に、PIA 依存関係の有効/無効を切り替える方法を確認します。

必須コンポーネント

このチュートリアルを実行するには、Microsoft Office Excel と Microsoft Office Word をコンピューターにインストールしておく必要があります。

注意

次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDE をカスタマイズする」をご覧ください。

Excel アドイン アプリケーションをセットアップする

  1. Visual Studio を起動します。

  2. [ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。

  3. [インストールされたテンプレート] ペインで、[Visual Basic] を展開し、[Office] を展開し、Office 製品のバージョン年度をクリックします。

  4. [テンプレート] ペインで、[Excel <バージョン> アドイン] をクリックします。

  5. [テンプレート] ペインの上部で、 [ターゲット フレームワーク] ボックスに [.NET Framework 4] またはそれ以降のバージョンが表示されていることを確認します。

  6. 必要に応じて、 [名前] ボックスにプロジェクトの名前を入力します。

  7. [OK] をクリックします。

  8. ソリューション エクスプローラーに新しいプロジェクトが表示されます。

参照の追加

  1. ソリューション エクスプローラーで、プロジェクトの名前を右クリックし、 [参照の追加] をクリックします。 [参照の追加] ダイアログ ボックスが表示されます。

  2. [アセンブリ] タブの [コンポーネント名] 一覧で、Microsoft.Office.Interop.Excel、バージョン <version>.0.0.0 (Office 製品番号のキーについては、Microsoft バージョンに関するページを参照してください) を選択し、Ctrl キーを押しながら Microsoft.Office.Interop.Wordversion <version>.0.0.0 を選択します。 アセンブリが表示されない場合は、アセンブリがインストールされ、表示されることの確認が必要になることがあります (「方法: Office のプライマリ相互運用機能アセンブリをインストールする」を参照)。

  3. [OK] をクリックします。

必要な Imports ステートメントまたは using ディレクティブを追加する

  1. ソリューション エクスプローラーで、 [ThisAddIn.vb] または [ThisAddIn.cs] ファイルを右クリックし、 [コードの表示] をクリックします。

  2. 次の Imports ステートメントが存在しない場合、コード ファイルの先頭に追加します。

    Imports Microsoft.Office.Interop
    

銀行口座のリストを作成する

  1. ソリューション エクスプローラーで、プロジェクト名を右クリックし、 [追加] をクリックしてから [クラス] をクリックします。 クラスに Account.vb という名前を付けます。 [追加] をクリックします。

  2. Account クラスの定義を次のコードに置き換えます。 このクラス定義では、自動実装プロパティが使用されます。 詳細については、「自動実装プロパティ」を参照してください。

    Public Class Account
        Property ID As Integer = -1
        Property Balance As Double
    End Class
    
  3. 2 つの口座を含む bankAccounts リストを作成するには、ThisAddIn.vbThisAddIn_Startup メソッドに次のコードを追加します。 一覧の宣言では、コレクション初期化子が使用されます。 詳細については、「コレクション初期化子」を参照してください。

    Dim bankAccounts As New List(Of Account) From {
        New Account With {
                              .ID = 345,
                              .Balance = 541.27
                         },
        New Account With {
                              .ID = 123,
                              .Balance = -127.44
                         }
        }
    

Excel にデータをエクスポートする

  1. 同じファイル内で、次のメソッドを ThisAddIn クラスに追加します。 このメソッドは、Excel ブックを設定し、データを Excel ブックにエクスポートします。

    Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account),
                   ByVal DisplayAction As Action(Of Account, Excel.Range))
    
        With Me.Application
            ' Add a new Excel workbook.
            .Workbooks.Add()
            .Visible = True
            .Range("A1").Value = "ID"
            .Range("B1").Value = "Balance"
            .Range("A2").Select()
    
            For Each ac In accounts
                DisplayAction(ac, .ActiveCell)
                .ActiveCell.Offset(1, 0).Select()
            Next
    
            ' Copy the results to the Clipboard.
            .Range("A1:B3").Copy()
        End With
    End Sub
    
    • Add メソッドには、特定のテンプレートを指定する省略可能なパラメーターがあります。 省略可能なパラメーターでは、パラメーターの既定値を使用する場合、そのパラメーターの引数を省略することができます。 前の例では引数が渡されないため、Add は、既定のテンプレートを使用して、新しいブックを作成します。

    • Range オブジェクトの Range および Offset プロパティではインデックス付きプロパティ機能を使用します。 また、インデックス付きプロパティを使用すると、Value プロパティを使用せずに、Range オブジェクトの Value2 プロパティを使用できます。 Value プロパティはインデックス付きですが、インデックスはオプションです。 次の例では、省略可能な引数とインデックス付きプロパティは連携しています。

  2. 次のコードを DisplayInExcel の末尾に追加して、コンテンツに合わせて列の幅を調整します。

    ' Add the following two lines at the end of the With statement.
    .Columns(1).AutoFit()
    .Columns(2).AutoFit()
    

    相互運用機能型の埋め込みの詳細については、この記事で後述する「PIA 参照を検索するには」および「PIA の依存関係を復元するには」の手順を参照してください。

DisplayInExcel を呼び出す

  1. ThisAddIn_StartUp メソッドの末尾に、次のコードを追加します。 DisplayInExcel に対する呼び出しには、2 つの引数が含まれています。 最初の引数は、処理する口座の一覧の名前です。 2 番目の引数は、データの処理方法を定義する複数行のラムダ式です。 各口座の ID 値と balance 値が隣接するセルに表示され、残高が 0 より少ない場合、行が赤で表示されます。

    DisplayInExcel(bankAccounts,
           Sub(account, cell)
               ' This multiline lambda expression sets custom
               ' processing rules for the bankAccounts.
               cell.Value = account.ID
               cell.Offset(0, 1).Value = account.Balance
    
               If account.Balance < 0 Then
                   cell.Interior.Color = RGB(255, 0, 0)
                   cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0)
               End If
           End Sub)
    
  2. プログラムを実行するには、F5 キーを押します。 口座からのデータを含む Excel ワークシートが表示されます。

Word 文書を追加する

  1. ThisAddIn_StartUp メソッドの末尾に次のコードを追加して、Excel ブックへのリンクを含む Word 文書を作成します。

    Dim wordApp As New Word.Application
    wordApp.Visible = True
    wordApp.Documents.Add()
    wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True)
    

    PasteSpecial メソッドには 7 つのパラメーターがあります。これらはすべて省略可能な参照パラメーターとして定義されます。 名前付き引数と省略可能な引数を使用すると、アクセスするパラメーターを名前で指定し、これらのパラメーターにのみ引数を渡すことができます。 この例では、引数は、クリップボードのブックへのリンクを作成する必要があること (Link パラメーター)、およびリンクがアイコンとして Word 文書に表示されること (DisplayAsIcon パラメーター) を示すために渡されます。

アプリケーションの実行

  1. F5 キーを押してアプリケーションを実行します。 Excel が起動し、bankAccounts の 2 つの口座からの情報が格納されたテーブルが表示されます。 Excel テーブルへのリンクを含む Word 文書が表示されます。

完成したプロジェクトをクリーンアップする

  1. Visual Studio で、 [ビルド] メニューの [ソリューションのクリーン] をクリックします。 それ以外の場合は、コンピューターで Excel を起動するたびにアドインが実行されます。

PIA 参照を検索する

  1. もう一度アプリケーションを実行しますが、 [ソリューションのクリーン] はクリックしません。

  2. [開始] を選択します。 Microsoft Visual Studio <バージョン> を見つけ、開発者コマンド プロンプトを開きます。

  3. [Developer Command Prompt for Visual Studio](Visual Studio 用開発者コマンド プロンプト) ウィンドウに「ildasm」と入力し、Enter キーを押します。 [IL DASM] ウィンドウが表示されます。

  4. [IL DASM] ウィンドウの [ファイル] メニューで [ファイル]>[開く] をクリックします。 [Visual Studio <バージョン>] をダブルクリックし、[プロジェクト] をダブルクリックします。 プロジェクトのフォルダーを開き、bin/Debug フォルダーでプロジェクト名.dll を見つけます。 プロジェクト名.dll をダブルクリックします。 新しいウィンドウに、他のモジュールおよびアセンブリへの参照に加えて、プロジェクトの属性が表示されます。 名前空間 Microsoft.Office.Interop.ExcelMicrosoft.Office.Interop.Word はアセンブリに含まれています。 Visual Studio の既定では、コンパイラは、参照 PIA からアセンブリに必要な型をインポートします。

    詳細については、「方法:アセンブリの内容を表示する」を参照してください。

  5. MANIFEST アイコンをダブルクリックします。 プロジェクトによって参照される項目を含んでいるアセンブリの一覧を含むウィンドウが表示されます。 Microsoft.Office.Interop.Excel および Microsoft.Office.Interop.Word は一覧に含まれていません。 プロジェクトに必要な型がアセンブリにインポートされているため、PIA への参照は必要ありません。 これにより、配置が容易になります。 PIA がユーザーのコンピューター上に存在している必要がなく、アプリケーションに特定のバージョンの PIA を配置する必要がないので、すべてのバージョンに必要な API が存在している場合は、複数のバージョンの Office を使用するようにアプリケーションを設計できます。

    PIA の配置が不要になったため、以前のバージョンを含む複数のバージョンの Office で動作する高度なシナリオで、アプリケーションを作成できます。 ただし、これは、コードで、使用している Office のバージョンでは利用できない APIを使用していない場合にのみ機能します。 特定の API が以前のバージョンで利用可能かどうかは常に明確ではないため、以前のバージョンの Office の使用はお勧めできません。

    注意

    Office 2003 より前の Office では、PIA は発行されません。 そのため、Office 2002 以前のバージョンの相互運用機能アセンブリを生成する唯一の方法は、COM 参照のインポートです。

  6. マニフェスト ウィンドウとアセンブリ ウィンドウを閉じます。

PIA の依存関係を復元する

  1. ソリューション エクスプローラーで、 [すべてのファイルを表示] ボタンをクリックします。 [参照] フォルダーを展開し、 [Microsoft.Office.Interop.Excel] を選択します。 F4 キーを押して [プロパティ] ウィンドウを表示します。
  2. [プロパティ] ウィンドウで、 [相互運用機能型の埋め込み] プロパティを [True] から [False] に変更します。
  3. Microsoft.Office.Interop.Word について、この手順の手順 1 と 2 を繰り返します。
  4. プロジェクトが正常に実行することを確認するには、F5 キーを押します。
  5. アセンブリ ウィンドウを開くには、前の手順の手順 1 ~ 3 を繰り返します。 Microsoft.Office.Interop.WordMicrosoft.Office.Interop.Excel は、埋め込まれたアセンブリの一覧には表示されません。
  6. MANIFEST アイコンをダブルクリックし、参照アセンブリのリストをスクロールします。 Microsoft.Office.Interop.WordMicrosoft.Office.Interop.Excel の両方が一覧に表示されています。 アプリケーションが Excel と Word の PIA を参照し、 [相互運用機能型の埋め込み] プロパティを [False] に設定しているため、両方のアセンブリがエンド ユーザーのコンピューター上に存在する必要があります。
  7. Visual Studio で、 [ビルド] メニューの [ソリューションのクリーン] をクリックして、完成したプロジェクトをクリーンアップします。

関連項目