こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WEBページからのメッセージをVBAで

いつもお世話になっております。
エクセル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を押すでも構いません。
どうかご教授お願いいたします。

投稿日時 - 2014-11-26 01:09:48

QNo.8837562

すぐに回答ほしいです

質問者が選んだベストアンサー

ご参考
https://gist.github.com/kumatti1/4028479

投稿日時 - 2014-11-26 07:39:46

補足

早速の回答ありがとうございます!

ie.Navigato2~を止まる前と、
後にそれぞれ入れてみました。
どっちもエラーは出ませんでしたが
ダイアログボックスは消えませんでした。

恐らく止まってしまうところの後に入れて、そこで止まらなければ動くんじゃないかと思われます…。

なぜダイアログボックスが出ると処理が止まってしまうのでしょうか。

投稿日時 - 2014-11-26 13:20:41

お礼

ありがとうございます!
試行錯誤したらできました!!

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

投稿日時 - 2014-11-27 01:13:59

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

http://okwave.jp/qa/q7429212.html

投稿日時 - 2014-11-26 09:25:45

あなたにオススメの質問