ここから本文です

IE画面上でのメッセージボックスのOKボタンを自動でクリックさせたいです。 win...

kit********さん

2014/5/1315:33:24

IE画面上でのメッセージボックスのOKボタンを自動でクリックさせたいです。
windowsXPとIE8の環境だと成功しますが、windows8.1とIE11の環境だと失敗します。

EXcel2010でVBAを使っています。
OSはwindows8.1、ブラウザはIE11です。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1311462994...
上記のページ参考に、自動でクリックをさせようとしました。
しかし、以下のループから抜けることができません。

Do
h = GetLastActivePopup(ie.hWnd) '最後のポップアップ取得
Loop While h = ie.hWnd 'ポップアップがieのhWndの間待つ()

どうやら、objIE.hWnd の値とGetLastActivePopup(objIE.hWnd)の値が一致しているのが原因のようです。
メッセージボックスのOKを自動でクリックするのに、SendKeysの他に良い方法はありますか?

尚、私はサンプルサイトを開いた状態で、以下のプログラムで試してみました。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetLastActivePopup Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Sub Sample1()

Dim colSh As Object
Dim win As Object
Dim ie As Object
Dim h As Long

Set colSh = CreateObject("Shell.Application")
For Each win In colSh.Windows
If TypeName(win.document) = "HTMLDocument" Then
If InStr(win.document.Title, "サンプルサイト") > 0 Then
Set ie = win
Exit For
End If
End If
Next

h = ie.hWnd
MsgBox "" & h & ""

ie.document.Script.setTimeout "javascript:document.getElementsByName('doCreate')(0).click()", 0

Sleep (1000)

h = GetLastActivePopup(ie.hWnd)
MsgBox "" & h & ""

'Do
'h = GetLastActivePopup(ie.hWnd) '最後のポップアップ取得
'Loop While h = ie.hWnd 'ポップアップがieのhWndの間待つ()
'PostMessage h, &H111, 1, 0 ''OKボタンを押す

End Sub

補足すみません。質問文に貼り付けたURLに不備がありました。正しくは以下の通りです。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1311462994...

閲覧数:
16,078
回答数:
2

違反報告

ベストアンサーに選ばれた回答

kum********さん

2014/5/1407:17:14

IE9以降は親ウィンドウがIE本体ではありませんので、GetLastActivePopupは使えません。
代わりにFindWindow等を使いましょう。
Do
DoEvents
h = FindWindow("#32770", "Web ページからのメッセージ")
Loop Until h <> 0

質問した人からのコメント

2014/5/14 12:01:50

降参 見事ハンドルを取得できました!OKボタンのクリックもできました。本当にありがとうございました。
また、wild_samurai_spiritsさん も、ご回答ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

wil********さん

編集あり2014/5/1403:58:25

ウィンドウのハンドル取得に GetLastActivePopup ではなくて、
GetActiveWindow や GetForegroundWindow を使ってみたらどうですか?
この2つの関数は、引数無しに無条件でハンドル取得が可能なので、
オーナーウィンドウの動作に影響されません。
宣言方法も Declare で Function 定義してやればOKです。

Declare Function GetActiveWindow Lib "user32" () As Long
あるいは
Declare Function GetForegroundWindow Lib "user32" () As Long

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる