2009-01-22 15:06:39艾倫 Programer

Excel 透過 VBA 呼叫 Web Service

本文的重點在於幫助交易員透過 VBA 可以呼叫到網路上的 Web Service, 當然啦, 版主會假設大家已有寫 VBA 的基礎經驗, 自然就不介紹如何編輯 VBA 程式或是安全性如何調整才可以執行等問題 !

首先, Excel 並無內建呼叫 Web Service 的功能, 但我們可以透過微軟提供的元件 Microsoft SOAP Toolkit Version 3 來達到我們的目的

微軟下載網址: http://www.microsoft.com/downloads/details.aspx?FamilyId=C943C0DD-CEEC-4088-9753-86F052EC8450&displaylang=en

或是透過 Google 來搜尋下載皆可

再者, 我們必須找一個網路上可以讓我們免費測試的 Web Service, 才能完成我們的練習, 這裡有不少測試的 Web Service http://www.xmethods.com

於是版主挑了一個 ISBN 的 Web Service 來練習 http://webservices.daehosting.com/services/isbnservice.wso?WSDL

當我們輸入參數為字串的 ISBN 號碼後, 對方會傳回 True / False 代表這是否為合法的 ISBN 號碼, 非常類似我們平常使用 Function 函數一樣

版主在 Excel 拉了一個元件 CommandButton1 並且寫了一段程式

Private Sub CommandButton1_Click()
  '初始化
  Dim oSOAP As Object
  Set oSOAP = CreateObject("MSSOAP.SoapClient30")
  Call oSOAP.mssoapinit("http://webservices.daehosting.com/services/isbnservice.wso?WSDL")
  Dim isTrueFalse As Boolean
  '呼叫 Soap Web Service
  isTrueFalse = oSOAP.IsValidISBN10(Sheet1.Cells(1, 1))
  MsgBox (Sheet1.Cells(1, 1) & " ISBN " & isTrueFalse)
End Sub

執行後, 程式會抓取 Sheet1.Cells(1, 1) 格子裡面的 ISBN 號碼, 並呼叫 Web Service 上的功能 IsValidISBN10 來驗證所傳的號碼是否為真

於是版主找了一本書測試【人月神話】ISBN: 986-7889-18-5 果然傳回 True , 但當版主故意輸入 ISBN: 986-7889-18-4 卻傳回 False

發現了沒 ? 簡單的呼叫 Web Service 卻讓 Excel 輕鬆很多, 程式碼不需要包的太複雜, 由廠商或資訊部或 IT 人員提供 Web Service , 讓交易員簡易地設計出自己想要的程式組合, 且不必太鑽研到底 ISBN 規則是如何判斷, 反正 Web Service 會幫你搞定 !

孫中山先生曾說過【知難行易】, 意思就是說要
知道 Web Service 裡面程式碼的邏輯很難, 但是執行呼叫卻是很容易的事情啊 ~

若想多了解 SOAP Toolkit 可以參考微軟網址 http://www.microsoft.com/TAIWAN/technet/book/WebServices/default_2.aspx

當然這不只可以套用在 VBA 裡, 其實連 VB6 也適用, 大家自己 DIY 試試看吧 ~

 Excel VBA 範例下載 http://cat.hfu.edu.tw/~m9025004/download/ExcelToWebService.zip