ダイアログボックスをクリックしたい
未読分:10件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#10 2020年11月12日(木)18時16分 From: Ao | 返事 削除 変更 |
初めまして。ご教授いただければと思います。 Webページにログインし、「全施設一括調整」をクリックするとポップアップが表示されます。 OKを押下したいのですが、素人ながら下記のコードではOKを押下することができません。 どのようにしたらいいでしょうか? Sub IE2() Dim objIE As InternetExplorer Set objIE = New InternetExplorer objIE.Visible = True objIE.navigate "https://〜" Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop Dim htmlDoc As HTMLDocument Set htmlDoc = objIE.document With htmlDoc .getElementById("txtCmpCd").Value = Worksheets("Sheet1").Range("C3") .getElementById("txtUserCd").Value = Worksheets("Sheet1").Range("C4") .getElementById("txtPassWd").Value = Worksheets("Sheet1").Range("C5") .getElementById("cmdLgn").Click End With Set htmlDoc = Nothing 'ログインページのHTMLをいったん破棄 Call WaitIE(objIE) '画面遷移の待機 Set htmlDoc = objIE.document 'ログイン後のページのHTMLを読み込む '預託在庫照会をクリック Dim obj As Variant For Each obj In htmlDoc.getElementsByTagName("a") If obj.innerText = "預託在庫照会" Then obj.Click Exit For End If Next Call WaitIE(objIE) '画面遷移の待機 '全施設一括調整ボタンクリック With htmlDoc .getElementById("ctl00$Content$cmdAllAdj").Click End With Call WaitIE(objIE) '画面遷移の待機 'メッセージの確認 hWindow = FindWindow("#32770", "Webページからのメッセージ") 'FindWindowでシステムダイアログのウィンドウを探します。 PostMessage hWindow, WM_COMMAND, vbOK, 0& 'システムダイアログのOKボタンを押す End Sub |
Message#9 2020年8月3日(月)17時49分 From: aaa | 返事 削除 変更 |
sendkyesでうまくいきました > SendKeysを使われてはどうですか? > > > Web ページからのメッセージ > > のメッセージをクリックできなくて、ここへたどり着きました。 > > > > 現在、64bitのexcel2016を使用しております。 > > 先の書込みのページは現在表示されないので検証できません。 > > > > https://gist.github.com/kumatti1/4028479 > > を参考にしましたが、 > > Private WithEvents ie As InternetExplorer > > でエラーが出て、先へ進めませんでした。 > > コメントアウトすると、動きますが、 > > 'ボタンクリックコード追加 > > にCall IEButtonClick(objIE, "確認ダイアログ")を追加しましたが、ダイアログ表示はしましたが、クリックはされませんでした。 > > ご教授のほど、宜しく御願い致します。 |
Message#8 2019年3月2日(土)04時43分 From: 三橋 | 返事 削除 変更 |
SendKeysを使われてはどうですか? > Web ページからのメッセージ > のメッセージをクリックできなくて、ここへたどり着きました。 > > 現在、64bitのexcel2016を使用しております。 > 先の書込みのページは現在表示されないので検証できません。 > > https://gist.github.com/kumatti1/4028479 > を参考にしましたが、 > Private WithEvents ie As InternetExplorer > でエラーが出て、先へ進めませんでした。 > コメントアウトすると、動きますが、 > 'ボタンクリックコード追加 > にCall IEButtonClick(objIE, "確認ダイアログ")を追加しましたが、ダイアログ表示はしましたが、クリックはされませんでした。 > ご教授のほど、宜しく御願い致します。 |
Message#7 2019年2月7日(木)04時08分 From: masa | 返事 削除 変更 |
Web ページからのメッセージ のメッセージをクリックできなくて、ここへたどり着きました。 現在、64bitのexcel2016を使用しております。 先の書込みのページは現在表示されないので検証できません。 https://gist.github.com/kumatti1/4028479 を参考にしましたが、 Private WithEvents ie As InternetExplorer でエラーが出て、先へ進めませんでした。 コメントアウトすると、動きますが、 'ボタンクリックコード追加 にCall IEButtonClick(objIE, "確認ダイアログ")を追加しましたが、ダイアログ表示はしましたが、クリックはされませんでした。 ご教授のほど、宜しく御願い致します。 |
Message#6 2014年11月28日(金)06時29分 From: VBAマスター | 返事 削除 変更 |
こちらも参考にしてはいかがですか? http://oshiete.goo.ne.jp/qa/7429212.html |
Message#5 2014年11月27日(木)03時18分 From: VBAマスター | 返事 削除 変更 |
提示したプログラムを実行するとエラーが起きますね。 以下のような形ではないでしょうか? Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long) Const WM_COMMAND As Long = &H111& Sub ie_CommandStateChange() Dim hwnd As Long Dim ie As InternetExplorer Dim a As Long, b As Long Dim objtag As Object Dim i As Long Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html" Do While ie.Busy Or ie.readyState < 4 DoEvents Loop Set objtag = ie.document.getElementsByTagName("INPUT") For i = 0 To objtag.length - 1 If objtag(i).value = "OK" Then ie.document.Script.setTimeout "javascript:document.getElementById('popOK').click()", 200 Sleep 1000 hwnd = FindWindow("#32770", "Web ページからのメッセージ") If hwnd <> 0 Then Debug.Print hwnd, ie.hwnd PostMessage hwnd, WM_COMMAND, vbOK, 0 End If Exit For End If Next i End Sub |
Message#4 2014年11月27日(木)03時05分 From: ゴリゴリ | 返事 削除 変更 |
すいません、少し試したいことがあったのでやったらうまくいきました。 なんとか試行錯誤してできてよかったです!! 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 Declare Function FindWindow Lib "User32.dll" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Const WM_COMMAND As Long = &H111& Sub ie_CommandStateChange() Dim hwnd As Long Dim ie As InternetExplorer Dim a As Long, b As Long Dim objtag As Object Dim i As Long Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html" Do While ie.Busy Or ie.readyState < 4 DoEvents Loop Set objtag = ie.document.getElementsByTagName("INPUT") For i = 0 To objtag.Length - 1 If objtag(i).Value = "OK" Then ie.document.Script.setTimeout "javascript:document.getElementById('popOK').click()", 200 Sleep 1000 hwnd = FindWindow("#32770", "Web ページからのメッセージ") If hwnd <> 0 Then Debug.Print hwnd, ie.hwnd PostMessage hwnd, WM_COMMAND, vbOK, 0 End If Exit For End If Next i End Sub |
Message#3 2014年11月27日(木)03時03分 From: ゴリゴリ | 返事 削除 変更 |
早速の回答ありがとうございます! ie.Navigato2〜を止まる前後に挿入してそれぞれ処理を実行すると、どちらもエラーは表示されませんでしたが、ダイアログボックスはそのままでOKをクリックしてくれませんでした。 恐らく止まってしまうところの後に入れて、そこで止まらなければ動くのではないかと考えているのですがどうでしょうか> なぜダイアログボックスが出ると処理が止まってしまうのかがなぞです。 |
Message#2 2014年11月26日(水)08時05分 From: VBAマスター | 返事 削除 変更 |
こちらを参考にされてはいかがですか? https://gist.github.com/kumatti1/4028479 |
Message#1 2014年11月26日(水)08時04分 From: ゴリゴリ | 返事 削除 変更 |
いつもお世話になっております。 エクセルVBAでIE制御についてです。 環境はWIN7、IE 9or11とエクセル2010です。 あるページのリンクをクリックすると、 WEBからのメッセージというダイアログボックスが出てきて、 続行しますか? はい いいえ を聞かれます。 その「はい」をVBAで押したいのですが、 sendkeysメソッドで押そうとしてもうまくいきません。 以下に記載したサイトのOKボタンを押すと出てくるものです。 http://kamicha1.web.fc2.com/Excel/Test20090726.html 以下が書いたコードです。 Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long) Sub test() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html" Do While ie.Busy Or ie.readyState < 4 DoEvents Loop ie.document.getElementsByClassName("bt2")(0).Click '-ここで止まる Sleep 2000 SendKeys "{Enter}" End Sub ステップ実行していくと、ここで止まると書いた所で、 IE上にダイアログは表示されるのですが、 それ以上ステップ実行ができなくなってしまいます。 ダイアログを自分でOKかキャンセルで消すと続きが動くようになります。 その間はVBEはビジー状態となり操作できません。 そのためそれ以降のsendkeysメソッドに たどり着けない状況かと思われます。 いろいろ調べたところIE8以降はダイアログボックスは IEから出ているのではなくOS?から出ているとの事でした。 上記のサイトはHTML本体にjavaスクリプトが記載されており、 それをVBAから操作すればどうにかOKボタンが押せるらしいのですが、 自分が操作したいページにはそれらしき記載がありませんでした。 対象のアンカータグは <a herl=URL 中略 data-comfirm=続行しますか? > のような感じで記載がありました。 完全に煮詰まっております。 自動でOKをクリックするかEnterキーでOKを押すでも構いません。 どうかご教授お願いいたします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降