前提・実現したいこと
VBAで、エクセルのセルに入力された値を元にHTTP通信し、結果を受け取りセルに出力したいです。
自身のスキルとしては、プログラミング初心者です。nodejs少々、VBAは記録マクロからスタートの独学のみなので、基本が理解できていないのは自覚しています。。
お分かりになる方がいらっしゃいましたらご教示いただけると幸いです。
また基本的な事項のご指摘も、お気付きの点がございましたらお願い致します。
発生している問題・エラーメッセージ
一通り動くことは確認でき、一部の処理を流用するのでfunctionで外部化したいのですが、戻り値が取得できません。
変数= 戻り値.lengthで「書き込みできません」のエラーメッセージが表示されます。
該当のソースコード
VBA
1Function getStatus(ByVal number As String) As Object 2 Dim http As Object 3 Set http = CreateObject("MSXML2.XMLHTTP") 4 5 http.Open "POST", "http://対象のURL", False 6 http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 7 http.send number 8 9 Do While http.readyState < 4 10 DoEvents 11 Loop 12 13 Dim html As Object 14 Set html = CreateObject("htmlFile") 15 html.write http.responseText 16 17 Dim statusData As Object 18 Set statusData = html.getElementsByClassName("aaa") 19 Do While statusData(0) = Empty 20 DoEvents 21 Loop 22 Set getStatus = statusData 23End Function 24 25Sub aaa() 26 Dim number As String 27 number = Range("A2").Value 28 29 Dim status As Object 30 Set status = getStatus(number) 31 32 Dim cnt As Long 33 cnt = status.Length 34 ・・・この先はエクセルへの出力処理 35 36End Sub
試したこと・確認したこと
処理を外部化する前は、動いていました。上記コードの通り外部化すると、戻り値が取れなくてエラーになってしまいます。
End Functionでブレークポイント入れて、その時点ではstatusDataに欲しいデータは入っています。
cnt = status.Lengthでブレークポイント入れるとstatusの値はなにもない(nothingもemptyも空文字もなし)状態です。
補足情報
OS Microsoft Windows 10 Home
EXCEL Microsoft Excel 2019 MSO (16.0.14326.20344) 32bit
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/01 13:44