前提・実現したいこと
VBAで、WEBページのボタンをクリックすると、確認のポップアップが表示されます。
すると、VBAの処理が止まり、ポップアップのOKボタンを押すまで処理が再開されません。
ボタンクリック処理の直下に、debug.printを記述してみた処、コンソール出力はされなかったので、
ボタンクリック処理の行で、処理が止まっているようです。
いろいろ検索して試してみたのですが、どうしても回避することができません。
該当のソースコード
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long Private Declare Function FindWindow Lib "User32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub fnCalibCheck() Dim objIE As InternetExplorer Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備 Dim strUrl As String Dim hWnd As Long Const WM_COMMAND As Long = &H111& 'Webページを開く Set objIE = New InternetExplorer objIE.Visible = True '個別URLを作成 strUrl = "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" objIE.navigate strUrl Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop Sleep 1000 'objIEで読み込まれているHTMLドキュメントをセット Set htmlDoc = objIE.document 'ダイアログボックスを表示しないを足したが機能しない 'objIE.Silent = False '問題の箇所 'ボタンをクリア htmlDoc.getElementsByName("clearButton")(0).Click 'ここで止まる。VBAから制御が離れる 'スリープを入れたり、外したらしてもダメ 'Sleep 2000 '1と2の順序を入れ替えてもダメ '1ダイアログを消す魔法の呪文。失敗 objIE.navigate "JavaScript:function confirm() { return true; }" '2こちらも失敗 hWnd = FindWindow("#32770", "Web ページからのメッセージ") If hWnd <> 0 Then PostMessage hWnd, WM_COMMAND, vbOK, 0 End If 'オブジェクト解放 Set htmlDoc = Nothing 'IEを閉じる objIE.Quit 'オブジェクト解放 Set objIE = Nothing End Sub
試したこと
1.objIE.Silent = Falseでそもそもポップアップ表示をなしにできないか
2.Sleep 2000を入れたらどうなるか
3.objIE.navigate "JavaScript:function confirm() { return true; }"でボタンを押せないか
4.hWnd = FindWindow("#32770", "Web ページからのメッセージ")で、ポップアップを検知する
※確認した処、3,4のコード行まで処理が走らない様子です。
補足情報(FW/ツールのバージョンなど)
WIN10、EXCEL2016
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/13 04:23