VBA / 抓取網路 JSON資料透過資料分割的分是取得JSON資料
在Gg / App 從Google Spreadsheets建立查詢ISBN的AppSheet APP 版本2
提到彰化一整天對於Html的處理方式只用了javascript內建函式
設計成2個外部程序來處理字串分割
而在VBA裡對於JSON資料的處理也同樣是字串分割
因此,嘗試將原有的VBA程式碼中字串分割的程序修改為呼叫外部Function處理
原來的Sub中進行資料分割的程式碼,是利用InStr()找特定字串出現的第一個字元的位置
再用Mid()取出範圍內的字串
'處理抓回來的資料 要依據實際資料進行調整 startVal = InStr(1, S, """" & "records" & """", vbTextCompare) ' "records" startVal = InStr(startVal, S, "[", vbTextCompare) '[ endVal = InStr(startVal, S, "]", vbTextCompare) '] strDiv = Mid(S, startVal, (endVal - startVal) + 1) '從"records" 後取出[{...}]
改寫成Function
VBA的Sub 跟 Function 最大的差別是 Function會有回傳值,所以也可以自訂函數在工作表中使用
'取得資料範圍 'Function 會有回傳值 Function Div(S As String, H As String) As String startVal = InStr(1, S, """" & H & """", vbTextCompare) ' "records" startVal = InStr(startVal, S, "[", vbTextCompare) '[ endVal = InStr(startVal, S, "]", vbTextCompare) '] Div = Mid(S, startVal, (endVal - startVal) + 1) '從"records" 後取出[{...}] End Function
回傳的形式是 Function名稱=回傳內容
相當於javascript 的return 回傳內容
需要筆記的部分還有
雖然VBA沒有強制設定變數資料型態,但是如果要將變數傳入Function時
就必須要設定資料型態
而Function的參數與回傳值也同樣要設定資料型態,這樣才不會產生錯誤
原來Sub程式碼改成呼叫Function的形式
Dim S As String '傳入function時必須精確設定資料類型 S = xmlHttp.ResponseText '回傳資料內容 ... ... Dim H As String H = "records" strDiv = Div(S, H) '將資料傳入Function Div處理