ダイアログボックスをクリックしたい

最近の書き込み件数: 今日 0件、昨日 0件
未読分:10件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

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を押すでも構いません。
どうかご教授お願いいたします。

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com