人力検索の質問 http://q.hatena.ne.jp/1272265167 を 確認してみた
(ダメ・不具合を確認しただけで、解決策はまだわからなかったり(ぉぃぉぃ)
セコイ方法 http://d.hatena.ne.jp/ken3memo/20100428/1272467509 でなんとか動かしていたり。)
VBAのIE処理で、
ボタンを押したあと(onClickでボタンからjavascript起動が起動)、
HTML内の javascript で prompt alert が 使用されていると、
処理が止まってしまう・・・
問題のテスト用のHTML ( http://ken3-info.blog.ocn.ne.jp/test/2010/04/javascript_prom.html )
HTMLのソースは
↑こんな感じ
テストページ<br><FORM ACTION="http://www.ken3.org/cgi-bin/test/test041-1.asp" METHOD="POST">
<font color="blue">TYPE="text" テキストの入力テスト</font><br>
お名前:<INPUT TYPE="text" SIZE="20" NAME="USER-NAME" VALUE="匿名希望"><br>
<INPUT TYPE="submit" value="送信テスト">
</FORM>ボタンって<br>
<button onclick="submitF3('DDDD')">ダウンロード</button><br>
<button onclick="submitF3('EEEE')">EEEEE</button><br>
とか1つですか?<br>
それとも<br>
フォームだからsubmit の ボタンに割り当ててあるのかなぁ?<br><hr>
<SCRIPT language="javaScript">
function submitF3(command) {
// コマンドを判断して、コメントの入力など
var comment = prompt("コメントを入力してください。","");//なんだかんだ処理して、最後にメッセージを表示する
alert("処理を受け付けました。");
}
</SCRIPT>
VBAのソースは↓みたいに最後に時刻表示でテストしました。
Option Explicit Sub ie_Test_Button() 'ボタンを押した先で javascript の prompt/alert が 走ったら、止まる... Dim objIE As Object 'IEオブジェクト参照用 'IEを起動する Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る objIE.Visible = True '見えるようにする(お約束) '.Navigate で 指定したURLを開く Dim strURL As String 'テストのHTML置き場 'strURL = "e:\work\index.html" 'ローカルでテスト strURL = "http://ken3-info.blog.ocn.ne.jp/test/2010/04/javascript_prom.html" 'テストページ objIE.Navigate strURL 'テストページを開く '↓デバック用で少し待つ(※これは通常いらないです) Application.Wait Time:=Now + TimeValue("00:00:03") '画面遷移がはやいので3秒間止める 'ページが表示される 完了を待つ While objIE.ReadyState <> 4 Or objIE.Busy = True 'READYSTATE_COMPLETE = 4 DoEvents '特に何もしないで.Busyの状態が変わるまで待つ Wend '↓デバック用で少し待つ(※これは通常いらないです) Application.Wait Time:=Now + TimeValue("00:00:03") '画面遷移がはやいので3秒間止める 'htmlドキュメント allのから .tagsでButtonタグを抜き '.InnerTEXT値(ボタンの名称) が VBA解説 の オブジェクト を クリック(.Click)する Dim objButton As Object 'Buttonタグ格納用 For Each objButton In objIE.Document.all.tags("Button") 'Buttonのタグを.allから抜く If objButton.InnerTEXT = "ダウンロード" Then '.InnerTEXT値(ボタンの名称) で判断する objButton.Click '見つけたButtonオブジェクト(ボタン)を.Clickクリックする Exit For '用が済んだので(見つかったので)ループを抜ける End If Next '↑上でボタンが見つからなかった時のエラー処理が入っていない手抜きだけど、ご勘弁を '通常は、ここに処理が来るはず・・・だが、処理が来ないので困った、困った。 Debug.Print Now & "に処理終了" End Sub
テスト結果は(動画です)
http://www.youtube.com/watch?v=bQYjvK_y_Ns
www.youtube.com
↑こんな感じで VBAの処理に帰ってきませんでした・・・
さてと、どうしましょうかねぇ・・・
その後、セコイ方法(ニセのjavascriptを読み込み後に挿入してつぶす)
http://d.hatena.ne.jp/ken3memo/20100428/1272467509
↑で、なんとか強引に動かしました。
別の方法
http://q.hatena.ne.jp/1174026115
の
wBrowser.Document.Script.setTimeout
↑こっちが正解かも。
余談.
押すことにこだわらないで、押させない、押す確認関数をつぶす。
'※読み込み完了後、自作のニセalertを追加する
'.navigate "JavaScript:でスクリプトの実行を利用して追加する
objIE.navigate "JavaScript:function alert() { return true; }"
みたいなことが最近(2018年)は、流行っているみたいですね。
www.youtube.com
【VBA IE操作】Javascriptのalert「Webページからのメッセージ」を消すテスト【三流君】 - YouTube