読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Excel VBAからXML WebService(SOAP)を利用する その1

Excel

TwitterをExcelから出来れば……という不純な動機で、Excel VBAからSOAPを利用出来ないか調査してみました。結果、案外簡単に使えそうなのでサンプルコードを書いて確認してみました。

サーバー(ASP.NET WebService)側の処理

ASP.NET WebServiceを事前に用意しておきます。ここでは仮にWebServiceのアドレスを「http://localhost/HogeWebService/Service1.asmx」として、WebMethodは以下の様に定義します。

VB.NET
<WebMethod()> _
Public Function IsLoginOK(ByVal userID As String, _
                          ByVal password As String) As Boolean

    If ((userID = "USRID") AndAlso (password = "PASS")) Then
        ' ユーザーIDとパスワードが一致していればログイン可能
        Return True
    Else
        ' ユーザーIDとパスワードが不一致なのでログイン不可
        Return False
    End If

End Function
C#
[WebMethod()]
public bool IsLoginOK(string userID, string password)
{
    if (((userID == "USRID") && (password == "PASS"))) {
        // ユーザーIDとパスワードが一致していればログイン可能
        return true;
    }
    else {
        // ユーザーIDとパスワードが不一致なのでログイン不可
        return false;
    }
}

クライアント(Excel VBA)側の処理

クライアント(Excel VBA)側の処理も作成していきます。

  1. Excelブックを新規作成します
  2. [ツール]→[参照設定]を開き、「Microsoft SOAP Type Library」のチェックボックスをオンにします
  3. 標準モジュールに下記のコードをコピペします
 Function SoapAccessSample() As Boolean

     ' SOAPClientオブジェクトの生成
     Dim oSOAPClient As Object
     Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
     
     ' mssoapinitメソッドは、WSDLファイルを入力として使って、
     ' SOAPClientオブジェクトを初期化します。
     ' 識別されたサービスが、初期化の際にSOAPClientオブジェクトにバインドされます。
     ' これにより、サービス内に定義されている操作を使用出来る様になります。
     Call oSOAPClient.mssoapinit("http://localhost/HogeWebService/Service1.asmx?wsdl")
     
     ' IsLoginOKメソッドを使用する
     Dim isLoginOK As Boolean
     isLoginOK = oSOAPClient.isLoginOK("USRID", "PASS")
     
     ' 結果を表示
     MsgBox (isLoginOK)

     SoapAccessSample = isLoginOK
 End Function

実行して「True」と、メッセージボックスに表示される事を確認します。

サーバー側の実装は

にてご紹介します。