IEのFormにデータをセットした時に、
エラーとなる場合があったりします。
※ページの表示を待たないと、エラーになります。
Sub ie_test20160624_err() 'IEテストする。 'テスト用文字列の入力 Dim strTEST As String strTEST = InputBox("テスト用の文字を入れて", "TEST", "TEST ") 'IEの起動 Dim objIE As InternetExplorer '変数を定義します。 Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。 objIE.Visible = True '可視、Trueで見えるようにします。 objIE.Top = 0 objIE.Left = 0 '処理したいページを表示します。 objIE.Navigate "http://www.ken3.org/cgi-bin/test/test029-2.asp" 'コメントにしてエラーをテスト 'ページの表示完了を待ちます。 'While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。 ' DoEvents '重いので嫌いな人居るけど。 'Wend 'ここまで 'データをHTML Formへ代入、送信 Dim e As HTMLInputElement 'エレメント '区分をチェックする Set e = objIE.Document.getElementsByName("KUBUN")(1) e.Checked = True 'データを代入 Set e = objIE.Document.getElementsByName("MEMO")(0) e.Value = strTEST '上で入力した値を代入する 'formを送信する e.form.submit '送信 End Sub
メッセージが
オートメーションエラー
なのですが、
IE側でオブジェクトの展開、解析中に
Excel側でデータを代入しようとしたりが原因です。
サンプルコードで、よく
objIE.Busy = True
の間回るを見かけると、思います。
今回は、この、
.ReadyState
.Busy
の値を探ってみたいと思います。
Sub ie_test20160624_Busy() 'IE Busyの値をDebug.printする。 'テスト用文字列の入力 Dim strTEST As String strTEST = InputBox("テスト用の文字を入れて", "TEST", "TEST ") 'IEの起動 Dim objIE As InternetExplorer '変数を定義します。 Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。 objIE.Visible = True '可視、Trueで見えるようにします。 objIE.Top = 0 objIE.Left = 0 '処理したいページを表示します。 objIE.Navigate "http://www.ken3.org/cgi-bin/test/test029-2.asp" '10秒間待ちます。 Dim dt10 As Date '10秒後 Dim strMOTO As String '比べる元の文字列 Dim strTEMP As String '一時的に使う作業エリア Debug.Print Now & " 10秒間チェックする 処理開始" dt10 = DateAdd("s", 10, Now) '現在時刻nowから10秒後を計算する strMOTO = "" '空文字を初期代入で初期化 While Now < dt10 '10秒後までループする '秒 + .Busy + .ReadyState で文字列を作成 strTEMP = Right(Now, 2) '現在時刻の右端から二文字切り取り代入 strTEMP = strTEMP & " .Busy = " & objIE.Busy 'objIE.Busyを追加 strTEMP = strTEMP & " .ReadyState = " & objIE.ReadyState '.ReadyStateを追加 '状態が変化したか?チェックする If strMOTO <> strTEMP Then '比較元と比べて違ったら? '結果の表示 Debug.Print Now & " " & strTEMP '比較元に値を代入 strMOTO = strTEMP End If DoEvents '処理をOSシステムへ渡す 重いので嫌いな人居るけど。 Wend Debug.Print Now & " 10秒チェック 処理終了" End Sub
いつもの操作動画
【VBA IE操作】オートメーションエラー .Busy .ReadyStateで表示を待ちましょう 【三流君】 - YouTube
www.youtube.com
いろいろ試して、遊んでみてください。