いつもお世話になっております。
エクセル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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- その他(ブラウザ) IE・edgeで日増しに観られるサイトが減ってくる。 1 2022/10/04 22:40
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- その他(パソコン・周辺機器) EXCELで「WEBオプションの対象ブラウザ」を変更する方法 2 2023/04/12 15:44
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAでIEを操作、ポップアップされた画面の処理(Enter)を行いたい
Visual Basic(VBA)
-
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
VBA IE操作でダイアログ表示後、ファイルを開くボタンが押下できない
Visual Basic(VBA)
-
-
4
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
5
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
6
(UWSC) 「#32770」の意味わかりますか?
その他(プログラミング・Web制作)
-
7
vbaでIEの名前を付けて保存(A)をしたい
Microsoft ASP
-
8
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
9
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
10
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
11
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
12
VBA IE操作 ダイアログボックス操作(ファイルを開く)
Visual Basic(VBA)
-
13
Webページ中の javascript をVBAから実行するには
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
HTML文書を上書き保存してもブ...
-
HTMLのimageをクリックする方法
-
AIRを使ってブラウザ上でWEBサ...
-
CSSチェックをしたいのですが
-
dreamweaverでCSSのレイアウト...
-
HTMLとブラウザについて
-
WindowsとMacでのChromeのスタ...
-
WEBページからのメッセージをVBAで
-
スマホでページ内リンクができない
-
エクセルでURLからタイトルのみ...
-
DOCTYPE宣言はしなくていいの?
-
HTML4.01のままの弊害
-
doc As HTMLdocumentのコンパイ...
-
XMLを作成してもタグしか表示さ...
-
掲示板からIPアドレスってど...
-
<TD><input type="text"></TD>...
-
隠しリンク、裏ページ、等を見...
-
テキストエリア内の改行禁止
-
DBからPDFを取得して別画面で表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
HTMLのバージョンの確認方法は?
-
Macで見るとページが崩れます。
-
WindowsとMacでのChromeのスタ...
-
<IMG>のALIGN属性値「absmiddle...
-
プルダウン(リストボックス)の...
-
エクセルのシートをブラウザに...
-
スマホでページ内リンクができない
-
doc As HTMLdocumentのコンパイ...
-
tabキーによるfocusの当たり方...
-
主要ポータルサイトの多くがス...
-
VBA オブジェクトが必要です
-
VBAでgetElementByTagName
-
起動済みのIEをハンドルから操...
-
HTML文書を上書き保存してもブ...
-
DOCTYPE宣言はしなくていいの?
-
Shift-JISでxml宣言するべき?
-
ブラウザのエンコード 自動選...
-
WEBページからのメッセージをVBAで
-
ブラウザ依存のレイアウト・・...
おすすめ情報