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

概要

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

詳細

Office マクロから ASP.NET を使用して XML Web サービスと正常に通信するには、マクロを実行するクライアントコンピューターに SOAP ツールキットがインストールされている必要があります。 そのため、この記事のデモでは 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 クラス (End クラスの直前の方) に貼り付けます。

    メモこのコードを実行する<前に、ユーザー ID<username> と password = 強力なパスワード> を正しい値に変更する必要があります。 データベースでこの操作を実行するための適切なアクセス許可が、ユーザー 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
    
    

注意

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

Web サービスをテストする

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

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

    このメソッドは、pubs データベースから Web サービスが抽出した作成者 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 に付属している、エレガントな Fax テンプレートを使用します。 このテンプレートを使用しない場合、このサンプルは機能しません。 テンプレートをインストールするには、次の手順を実行します。

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

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

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

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

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

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

    メモ[参照設定] ダイアログボックスでMicrosoft SOAP タイプライブラリが使用できない場合は、[参照] をクリックします。 [参照の追加] ダイアログボックスで、ディレクトリ C:\Program Files\Common Files\MSSoap\Binaries を参照し、[mssoap1] を選択します。 [開く] をクリックし、[ 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. [挿入] メニューの [ユーザーフォーム] をクリックして空のユーザーフォームを挿入します。

  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] を展開し、[スプレッドシートテンプレート] を展開して、[売上請求書] をクリックします。 [マイコンピューターから実行] をクリックし、[更新] をクリックします。

Excel で Web サービスを使用するには、次の手順を実行します。

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

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

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

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

    メモ[参照設定] ダイアログボックスでMicrosoft SOAP タイプライブラリが使用できない場合は、[参照] をクリックします。 [参照の追加] ダイアログボックスで、ディレクトリ C:\Program Files\Common Files\MSSoap\Binaries を参照し、[mssoap1] を選択します。 [開く] をクリックし、[ 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 Office\Templates\1033\Sales Invoice. .xlt" です。

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

  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 を選択し、コマンドボタンをクリックすると、そのユーザーの情報を使用して請求書が生成されます。

References

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

301273 Visual Basic .Net を使用して簡単な Web サービスを作成する方法