VBA / 抓取網路 JSON資料 版本2

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處理

 

參考資料

EXCEL VBA 函數(Function)與副程式(Sub)