いつもお世話になっております。
エクセル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
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
7
ダウンロードダイアログをVBAから操作するには?
Visual Basic(VBA)
-
8
(UWSC) 「#32770」の意味わかりますか?
その他(プログラミング・Web制作)
-
9
vbaでIEの名前を付けて保存(A)をしたい
Microsoft ASP
-
10
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
11
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
12
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
13
VBA IE操作 ダイアログボックス操作(ファイルを開く)
Visual Basic(VBA)
-
14
Webページ中の javascript をVBAから実行するには
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
doc As HTMLdocumentのコンパイ...
-
CSSやJavaScriptのバージョン指定
-
cssレイアウトでSafariだけがど...
-
SVGの表示
-
ブラウザやOSによる表示の違...
-
DreamweaverでIE用Java反映され...
-
記述した覚えのないソースコード
-
キーフレーム
-
掲示板からIPアドレスってど...
-
XMLを作成してもタグしか表示さ...
-
aviutlで最後まで動画が読み込...
-
ボタンコントロールのTEXT...
-
HTML 全画面表示 リンク先の...
-
AfterEffectsでイージーイーズ...
-
pdfファイルをFrameMakerに取り...
-
高校1年生情報の問題について。
-
ASP.NET TextBox 入力制限
-
DBからPDFを取得して別画面で表...
-
ソース表示で文字化け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GoogleChromeでレイアウトが左...
-
WindowsとMacでのChromeのスタ...
-
プルダウン(リストボックス)の...
-
doc As HTMLdocumentのコンパイ...
-
HTMLのバージョンの確認方法は?
-
VBA オブジェクトが必要です
-
スマホでページ内リンクができない
-
Macで見るとページが崩れます。
-
起動済みのIEをハンドルから操...
-
tabキーによるfocusの当たり方...
-
DOCTYPE宣言はしなくていいの?
-
HTML文書を上書き保存してもブ...
-
CSSやJavaScriptのバージョン指定
-
VBAでgetElementByTagName
-
<IMG>のALIGN属性値「absmiddle...
-
エクセルのシートをブラウザに...
-
WEBページからのメッセージをVBAで
-
dreamweaverでCSSのレイアウト...
-
エクセルでURLからタイトルのみ...
-
ブラウザによって見え方が異なる。
おすすめ情報