みなさん、こんちには!
前回に引き続き、 WebサイトからExcelを使ってデータを取得 していきます。
今回は、 ステータスを取得し状態を確認してからデータを取得する方法 です。
下記は、前回までのコードです。これに状態を確認して読み込み完了するまで待機するコードを追加していきます。
1 2 3 4 5 |
Dim web_con As Object Set web_con = CreateObject("MSXML2.XMLHTTP") web_con.Open "GET", "https://www.rakuten.co.jp/",False web_con.Send |
readyStateプロパティを使って読み込み完了の状態になるまで確認を繰り返すコードを見てみましょう。
7 8 9 10 |
Do While web_con.readyState < 4 DoEvents Sleep 1 Loop |
web_con.readyState < 4 の 「4」は、 読み込み完了 を表す定数になります。
Sleep 1 は、1ミリ秒を停止するWindows API関数になります。
VBAには Application.Wait メソッドがあるのですが、何時になるまで停止すると言う意味になります。単位も基本的には秒単位になります。これを同じ1ミリ秒を停止するコードを表すと下記になります。
1ミリ秒を表すのみ1ミリ秒/1日になります。コードの見た目なのか秒単位しか出来ないと勘違いなのかは分かりませんが、 Sleep 1 の方が良く使われている様です。
ただし、API関数を使う為には別のコードが必要になります。下記に表示します。
1 2 3 4 5 |
#If VBA7 Then Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If |
このコードは標準モジュールに記述しましょう。
※Excelの32bit・64bitの両方に対応しています。
いよいよデータの取得になります。
responseText プロパティを使ってテキストで取得するコードが下記になります。
実行してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Dim HTML_str As String Dim web_con As Object Set web_con = CreateObject("MSXML2.XMLHTTP") web_con.Open "GET", "https://www.rakuten.co.jp/",False web_con.Send Do While web_con.readyState < 4 DoEvents Sleep 1 Loop HTML_str = web_con.responseText Debug.Print HTML_str |
テキストが文字化けしているのに気付くと思います。
次回は、文字コードを変換して正しくテキストを表示してみましょう。
コメント