
いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。
あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。
その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。
以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.h …
以下が書いたコードです。
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.h …
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を押すでも構いません。
どうかご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
この回答への補足
早速の回答ありがとうございます!
ie.Navigato2~を止まる前と、
後にそれぞれ入れてみました。
どっちもエラーは出ませんでしたが
ダイアログボックスは消えませんでした。
恐らく止まってしまうところの後に入れて、そこで止まらなければ動くんじゃないかと思われます…。
なぜダイアログボックスが出ると処理が止まってしまうのでしょうか。
ありがとうございます!
試行錯誤したらできました!!
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.h …
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
WindowsとMacでのChromeのスタ...
-
なぜyahooなどはCSSじゃないん...
-
起動済みのIEをハンドルから操...
-
XMLを作成してもタグしか表示さ...
-
AfterEffectsでイージーイーズ...
-
Hタグを改行禁止にしてspanのよ...
-
Python 3.12.2 か一番最新のパ...
-
リンク先のURLを非表示にし...
-
プルダウンメニューの開く方向...
-
H1タグに改行の<br>を使う
-
photoshopのアニメーションで拡...
-
ツールチップの表示時間の調整
-
C#のシリアル通信プログラムで...
-
Edgeを操作するアプリについて
-
テキストエリア内の改行もその...
-
Dreamweaverの改行コードをLFに...
-
RefreshのWindow指定
-
アコーディオン仕様の中の ul l...
-
Eclipseの空白が変な...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
プルダウン(リストボックス)の...
-
doc As HTMLdocumentのコンパイ...
-
WindowsとMacでのChromeのスタ...
-
<IMG>のALIGN属性値「absmiddle...
-
IE以外でのfilter
-
ie6のコーディングで何をすれば...
-
いずれ、HTMLのHPは見れ...
-
HTMLとXHTMLどちらにすべきか
-
HTMLのバージョンの確認方法は?
-
Shift-JISでxml宣言するべき?
-
日数カウントダウンが、ブラウ...
-
ブログのコメント欄のデザイン...
-
表示中のブラウザ情報を他のブ...
-
DOCTYPE宣言はしなくていいの?
-
主要ポータルサイトの多くがス...
-
dreamweaverでCSSのレイアウト...
-
ブラウザから直接HTMLを取得す...
-
何種類のブラウザで表示確認し...
-
dreamweaver 破線・点線が見えない
おすすめ情報