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)側の処理も作成していきます。
- Excelブックを新規作成します
- [ツール]→[参照設定]を開き、「Microsoft SOAP Type Library」のチェックボックスをオンにします
- 標準モジュールに下記のコードをコピペします
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
と、メッセージボックスに表示される事を確認します。
サーバー側の実装は「Excel VBAからXML WebService(SOAP)を利用してみた その2 - 酢ろぐ!」にてご紹介します。