
いつもお世話になっております。
エクセル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ランキング
-
AIRを使ってブラウザ上でWEBサ...
-
プルダウン(リストボックス)の...
-
webブラウザで動作するタイマー...
-
起動済みのIEをハンドルから操...
-
<IMG>のALIGN属性値「absmiddle...
-
ボタンをクリックした時に指定...
-
XMLを作成してもタグしか表示さ...
-
Windowsのformでtextareaに入力...
-
HTMLでリンク先を新しいタブで...
-
AfterEffectsでイージーイーズ...
-
長いURLを途中で改行(折り返す...
-
品質表示タグが付いてない商品
-
Excel VBA 見本通りに...
-
プルダウンメニューの開く方向...
-
H1タグに改行の<br>を使う
-
C#のシリアル通信プログラムで...
-
ツールチップの表示時間の調整
-
VC++2010 MFC サイズの最大化に...
-
pixivの消えないブックマークタ...
-
_blank?_brank?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
<IMG>のALIGN属性値「absmiddle...
-
AIRを使ってブラウザ上でWEBサ...
-
DeepLでエクセルのA列の英文の...
-
doc As HTMLdocumentのコンパイ...
-
ボタンをクリックした時に指定...
-
webブラウザで動作するタイマー...
-
プルダウン(リストボックス)の...
-
HTMLのバージョンの確認方法は?
-
vbaでIEを起動した後、「ログイ...
-
【CSS学習時のブラウザについて...
-
HTMLやCSSでWEBサイトをスラス...
-
ブラウザ依存のレイアウト・・...
-
起動済みのIEをハンドルから操...
-
webページの有効期限が切れてい...
-
VBA オブジェクトが必要です
-
WEBページからのメッセージをVBAで
-
VBAでgetElementByTagName
-
[JAVA]IE→Edge対応時にURLが表...
-
ブラウザの種類やバージョンに...
おすすめ情報