Word または Excel で Office VBA マクロから ASP.NET を使用して XML Web サービスを使用する方法

概要

この記事では、Word または Excel の Visual Basic for Applications (VBA) マクロの ASP.NET を使用して XML Web サービスを使用する方法について説明します。

詳細情報

Office マクロの ASP.NET を使用して XML Web サービスと正常に通信するには、マクロが実行されているクライアント コンピューターに SOAP Toolkit をインストールする必要があります。 したがって、この記事のデモンストレーションには SOAP Toolkit が必要です。 SOAP Toolkit の詳細については、ダウンロード手順を含みます。

ASP.NET を使用して XML Web サービスを作成する

  1. Microsoft Visual Studio .NET を起動します。 [ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。 [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] で [Visual Basic プロジェクト] をクリックし、[テンプレート] の [ASP.NET を使用して XML Web サービス] をクリックします。 プロジェクトに SQLQuery という名前を付け、[OK] をクリックします。 既定では、Service1 のデザイン フォームが表示されます。

  2. [表示] メニューの [コード] をクリックして、Service1 のコード ウィンドウを表示します。

  3. 次のコードをコード ウィンドウの上部に貼り付けます。

    Imports System.Data.SqlClient
    
  4. Service1 クラス (エンド クラスの直前) に次のコードを貼り付けます。

    メモ このコードを実行する前に、ユーザー ID <のユーザー名> とパスワード =<厳密なパスワード> を正しい値に変更する必要があります。 ユーザー ID に、データベースに対してこの操作を実行するための適切なアクセス許可があることを確認します。

    Private Const strConn = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=localhost"
    
    <WebMethod()> Public Function GetIDs() As String()
        Dim i As Integer
    
    ' Create an open connection.
        Dim oConn As New SqlConnection(strConn)
        oConn.Open()
    
    Dim oDataset As New System.Data.DataSet()
        ' Execute the query.
        Dim oAdapter As New SqlDataAdapter("SELECT au_id FROM authors", oConn)
        ' Fill the dataset.
        oAdapter.Fill(oDataset)
    
    Dim s(oDataset.Tables(0).Rows.Count - 1) As String
        ' Create an array of IDs.
        For i = 0 To oDataset.Tables(0).Rows.Count - 1
            s(i) = oDataset.Tables(0).Rows(i).ItemArray.GetValue(0)
        Next i
        ' Return the array.
        Return s
    End Function
    
    <WebMethod()> Public Function QueryDatabase(ByVal sID As String) As String()
        Dim i As Integer
    
    ' Create an open a connection.
        Dim oConn As New SqlConnection(strConn)
        oConn.Open()
    
    Dim oCommand As New SqlCommand("SELECT * FROM authors WHERE au_id='" + sID + "'", oConn)
        Dim oReader As SqlDataReader
        ' Execute the query and assign results to a SqlDataReader.
        oReader = oCommand.ExecuteReader()
        oReader.Read()
    
    Dim s(7) As String
        ' Build an array of results.
        For i = 0 To 7
            s(i) = CType(oReader.GetValue(i), String)
        Next
        ' Return the array.
        Return s
    End Function
    
    

注:

SQL Server pubs データベースの有効な接続文字列になるように、コード内の strConn 定数を変更します。

Web サービスをテストする

  1. F5 キーを押して、Web サービス ソリューションをビルドして実行します。 .NET 統合開発環境 (IDE) から Web サービスを実行すると、Microsoft Internet Explorer によってソリューションから Service1.asmx が読み込まれます。

  2. GetIDs メソッドをテストします。 これを行うには、GetIDs ハイパーリンクをクリックし、[呼び出し] をクリックします。

    このメソッドは、Web サービスが pubs データベースから抽出した作成者 ID の一覧を返します。 結果は、ブラウザーに XML として表示されます。

  3. ブラウザー ウィンドウまたはウィンドウを閉じて Visual Studio に戻ります。

  4. もう一度 F5 キーを押して Web サービスを実行します。

  5. QueryDatabase メソッドをテストします。 これを行うには、QueryDatabase ハイパーリンクをクリックし、sID パラメーターに「409-56-7008」と入力し、[呼び出し] をクリックします。

    このメソッドは、ID 409-56-7008 の作成者の詳細を返します。 結果は、ブラウザーに XML として表示されます。

  6. ブラウザー ウィンドウまたはウィンドウを閉じて、Web サービスを終了します。

Word から Web サービスを使用する

このサンプルでは、Word に付属する Elegant Fax テンプレートを使用します。 このサンプルは、このテンプレートがないと機能しません。 テンプレートをインストールするには、次の手順に従います。

  1. Office セットアップ ウィザードを開始します。
  2. ウィザードで、[機能の追加と削除] をクリックします。
  3. [インストールする機能] で、Microsoft Excel for Windows を展開します。 [スプレッドシート テンプレート] をクリックし、[マイ コンピューターから実行] をクリックして、[更新] をクリックします。

Word から Web サービスを使用するには、次の手順に従います。

  1. Word を起動します。 既定では、空白のドキュメントが作成されます。

  2. [ツール] メニューの [マクロ] をクリックし、[Visual Basic エディター] をクリックします。 [挿入] メニューの [モジュール] をクリックして、空のコード モジュールを挿入します。

  3. **[ツール] **メニューの [ 参照] をクリックします。

  4. [ 参照 ] ダイアログ ボックスで、 Microsoft SOAP タイプ ライブラリを選択し、[ OK] をクリックします。

    メモ[参照] ダイアログ ボックスで Microsoft SOAP タイプ ライブラリを使用できない場合は、[参照] をクリックします。 [ 参照の追加 ] ダイアログ ボックスで、ディレクトリ C:\Program Files\Common Files\MSSoap\バイナリを参照し、mssoap1.dllを選択します。 [ 開く ] をクリックし、[OK] をクリック します

  5. コード モジュールに次のコードを貼り付けます。

    Public Const sServer = "localhost"
    
    Sub GenerateForm(sID As String)
        Dim oSOAPClient As Object
    
    On Error GoTo errhand
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        arrTemp = oSOAPClient.QueryDatabase(sID)
    
    Dim oDoc As Word.Document
    
    Set oDoc = Application.Documents.Add("Elegant Fax.dot")
        oDoc.Bookmarks("Company").Range.Text = arrTemp(2) + " " + arrTemp(1) + vbCrLf + _
                arrTemp(4) + vbCrLf + arrTemp(5) + ", " + arrTemp(6) + "  " + arrTemp(7) + vbCrLf + _
                arrTemp(3)           
        Exit Sub
    errhand:
        MsgBox "Error #" + Err.Number + ": " + Err.Description
    End Sub
    
    Sub ShowForm()
      ' Show the dialog box to the user.
      UserForm1.Show
    End Sub
    
    

    メモ 作成した Web サービスをホストしているサーバーを指すように sServer 定数を変更します。

  6. [挿入] メニューの [UserForm] をクリックして、空のユーザー フォームを挿入します。

  7. フォームに大きなリスト ボックスとコマンド ボタンを配置します。

  8. [表示] メニューの [コード] をクリックして、ユーザー フォームのコード ウィンドウに変更します。

  9. コード ウィンドウの内容を次のように置き換えます。

    Private Sub CommandButton1_Click()
        ' Generate a FAX based on the ID.
        GenerateForm ListBox1.List(ListBox1.ListIndex)
        UserForm1.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim oSOAPClient As Object
    
    ' Create a SOAP client.
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        ' Initialize the SOAP client to the Web service.
        oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        ' Get an array of IDs.
        arrTemp = oSOAPClient.GetIDs()
    
    ' Fill the list box with IDs.
        For i = 0 To UBound(arrTemp)
          ListBox1.AddItem arrTemp(i)
        Next
    End Sub
    
  10. VBA エディターを閉じて、ドキュメントに戻ります。

  11. [ツール] メニューの [マクロ] をクリックし、[マクロ] をクリックします。 [マクロ] ダイアログ ボックスで ShowForm マクロを実行して、ID の一覧を表示します。 一覧から ID を選択し、コマンド ボタンをクリックして、そのユーザーの情報を含む FAX ドキュメントを生成します。

Excel から Web サービスを使用する

このサンプルでは、Excel に付属する売上請求書テンプレートを使用します。 このサンプルは、このテンプレートがないと機能しません。 テンプレートをインストールするには、次の手順に従います。

  1. Office セットアップ ウィザードを開始します。
  2. ウィザードで、[機能の追加と削除] をクリックします。
  3. [インストールする機能] の [Microsoft Excel for Windows] を展開し、[スプレッドシート テンプレート] を展開して、[売上請求書] をクリックします。 [マイ コンピューターから実行] をクリックし、[更新] をクリックします。

Excel から Web サービスを使用するには、次の手順に従います。

  1. Excel を起動します。 空白のブックは既定で作成されます。

  2. [ツール] メニューの [マクロ] をクリックし、[Visual Basic エディター] をクリックします。 [挿入] メニューの [モジュール] をクリックして、空のコード モジュールを挿入します。

  3. **[ツール] **メニューの [ 参照] をクリックします。

  4. [ 参照 ] ダイアログ ボックスで、 Microsoft SOAP タイプ ライブラリを選択し、[ OK] をクリックします。

    メモ[参照] ダイアログ ボックスで Microsoft SOAP タイプ ライブラリを使用できない場合は、[参照] をクリックします。 [ 参照の追加] ダイアログ ボックスで、ディレクトリ C:\Program Files\Common Files\MSSoap\バイナリを参照し、mssoap1.dllを選択します。 [ 開く ] をクリックし、[OK] をクリック します

  5. コード モジュールに次のコードを貼り付けます。

    Const sTemplatePath = "C:\Microsoft Office\Templates\1033\Sales Invoice.xlt"
    Public Const sServer = "localhost"
    
    Sub GenerateForm(sID As String)
        Dim oSOAPClient As Object
    
    On Error GoTo errhand
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        arrTemp = oSOAPClient.QueryDatabase(sID)
    
    Dim oBook As Excel.Workbook
    
    Set oBook = Application.Workbooks.Add(sTemplatePath)
        With oBook.ActiveSheet
          If If CInt(Application.Version) = 10 Or CInt(Application.Version) = 11 Then
            .Range("D13").Value = arrTemp(2) + " " + arrTemp(1)
            .Range("D14").Value = arrTemp(4)
            .Range("D15").Value = arrTemp(5)
            .Range("F15").Value = arrTemp(6)
            .Range("H15").Value = arrTemp(7)
            .Range("D16").Value = arrTemp(3)
    
    .Range("M13").Value = CStr(Date)
            .Range("C19").Value = "45.8"
            .Range("D19").Value = "Consulting hours"
            .Range("L19").Value = "75"
          ElseIf CInt(Application.Version) = 9 Then
            .Range("data5").Value = arrTemp(2) + " " + arrTemp(1)
            .Range("data6").Value = arrTemp(4)
            .Range("data7").Value = arrTemp(5)
            .Range("data8").Value = arrTemp(6)
            .Range("data9").Value = arrTemp(7)
            .Range("data10").Value = arrTemp(3)
    
    .Range("data11").Value = "45.8"
            .Range("data12").Value = "Consulting hours"
            .Range("data13").Value = "75"
          End If
        End With
        Exit Sub
    errhand:
        MsgBox "Error #" + Err.Number + ": " + Err.Description
    End Sub
    
    Sub ShowForm()
      ' Show the dialog box to the user.
      UserForm1.Show
    End Sub
    
    

    メモ 作成した Web サービスをホストしているサーバーを指すように sServer 定数を変更します。 請求書ファイルの正しいパスを指すように sTemplatePath 定数を変更します。 Office 2000 の場合、このファイルの既定の場所は C:\Microsoft Office\Templates\1033\Invoice.xlt です。 Office XP の場合、既定の場所は C:\Microsoft Office\Templates\1033\Sales Invoice.xlt です。

  6. [挿入] メニューの [UserForm] をクリックして、空のユーザー フォームを挿入します。

  7. フォームに大きなリスト ボックスとコマンド ボタンを配置します。

  8. [表示] メニューの [コード] をクリックして、ユーザー フォームのコード ウィンドウに変更します。

  9. コード ウィンドウの内容を次のように置き換えます。

    Private Sub CommandButton1_Click()
        ' Generate a FAX based on the ID.
        GenerateForm ListBox1.List(ListBox1.ListIndex)
        UserForm1.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim oSOAPClient As Object
    
    ' Create a SOAP client.
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        ' Initialize the SOAP client to the Web service.
        oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        ' Get an array of IDs.
        arrTemp = oSOAPClient.GetIDs()
    
    ' Fill the list box with IDs.
        For i = 0 To UBound(arrTemp)
          ListBox1.AddItem arrTemp(i)
        Next
    End Sub
    
    
  10. VBA エディターを閉じてブックに戻ります。

  11. [ツール] メニューの [マクロ] をクリックし、[マクロ] をクリックします。 [マクロ] ダイアログ ボックスで ShowForm マクロを実行して、ID の一覧を表示します。 一覧から ID を選択し、コマンド ボタンをクリックして、そのユーザーの情報を含む請求書を生成します。

関連情報

Web サービスの詳細については、Microsoft サポート技術情報の記事を参照してください。

301273 Visual Basic .NET を使用して単純な Web サービスを記述する方法