エクセルVBAでポップアップ画面のOKをクリックするには
未読分:6件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#6 2014年9月6日(土)23時35分 From: 管理人 | 返事 削除 変更 |
JavaScript処理についてまとめました。 【参考ページ】 JavaScript実行:http://www.vba-ie.net/ie/javascript.html |
Message#5 2014年9月6日(土)18時43分 From: みらねうた | 返事 削除 変更 |
ありがとうございます! うまくいきました! |
Message#4 2014年9月6日(土)10時37分 From: 管理人 | 返事 削除 変更 |
> になっており、SendKeys "{ENTER}"を2回設定してもDのOKをクリックできませんでした。 > Cのポップアップ画面が表示される前に2回処理してしまっているんだと思います。 SendKeys "{ENTER}" '2秒停止 Sleep 2000 SendKeys "{ENTER}" で一旦処理を止めてからSendKeys処理をしたらどうですか? |
Message#3 2014年9月6日(土)09時12分 From: みらねうた | 返事 削除 変更 |
ありがとうございます! Call ieJS(objIE, "fnFormConfirm(); ") で処理をしたらうまく表示されOKがクリックされました。 ただ、こちらの処理が @ボタンクリック A登録しますか?(ポップアップ画面) BOKクリック C登録しました(ポップアップ画面) DOKクリック←ここができない になっており、SendKeys "{ENTER}"を2回設定してもDのOKをクリックできませんでした。 こちらはどのように対応すればよろしいですか? |
Message#2 2014年9月5日(金)08時25分 From: 管理人 | 返事 削除 変更 |
ボタンのクリックはsubmitメソッドもしくはClickメソッドを利用して処理をしますが、中には以下のようにjavaScriptが設定されている場合があります。 <input type="submit" value="送信" onclick="alert('送信ボタンが押されました')" /> 本来であれば「送信ボタンが押されました」というポップアップ画面が表示されるのですが、submitメソッドで処理するとポップアップ画面は表示されず、formで設定されているactionへ処理を行います。 参考ページ:http://www.vba-ie.net/form/submit.html 今回のケースで行けば、aタグにjavaScriptが設定されているので、Clickメソッドを利用して処理できますが、Clickメソッドでは、ポップアップウィンドウを制御できない場合があります。 その場合は、Clickメソッドではなく、javaScriptで処理を行います。 また、ポップアップ画面のOKクリックには「SendKeysステートメント」を利用してクリックしていきます。 下記が参考ソースですので、sampleプロシージャを実行してみてください。 【参考ページ】 submitボタン操作:http://www.vba-ie.net/form/submit.html SendKeysステートメント:http://www.vba-ie.net/collection/iebasic2.html 【プログラム】 #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If 'ページ表示サブルーチン Sub ieView(objIE As InternetExplorer, _ urlName As String, _ Optional viewFlg As Boolean = True) 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IEを表示・非表示 objIE.Visible = viewFlg '指定したURLのページを表示する objIE.Navigate urlName 'IEが完全表示されるまで待機 Call ieCheck(objIE) End Sub 'ページ完全読込処理サブルーチン Sub ieCheck(objIE As InternetExplorer) Dim timeOut As Date timeOut = Now + TimeSerial(0, 0, 10) Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Sleep 100 If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 10) End If Loop timeOut = Now + TimeSerial(0, 0, 10) Do Until objIE.document.ReadyState = "complete" DoEvents Sleep 100 If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 10) End If Loop End Sub 'javaScript実行サブルーチン Sub ieJS(objIE As InternetExplorer, jsCode As String) objIE.navigate "JavaScript:" & jsCode End Sub 'NumLockOnサブルーチン Sub numLockOn() Dim NumLockState As Boolean Dim keys(0 To 255) As Byte GetKeyboardState keys(0) NumLockState = keys(VK_NUMLOCK) '「NumLock」キーがオフの場合はオンにする。 If NumLockState <> True Then 'キーを押す keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0 'キーを放す keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0 End If End Sub Sub sample() Dim objIE As InternetExplorer 'テスト用フォームページを表示 Call ieView(objIE, "http://www.vba-ie.net/code/test.html") 'ieJSで処理 Call ieJS(objIE, "alert('送信ボタンが押されました')") '2秒停止 Sleep 2000 'Enter押下 SendKeys "{ENTER}" '「NumLock」キーをON Call numLockOn End Sub 【sampleプロシージャ解説】 テスト用フォームページを表示します。 次にieJSサブルーチンでjavaScriptで処理をします。 javaScriptで処理をした後にポップアップ画面が表示されますので、その間2秒ほど処理を停止させます。 ポップアップ画面が表示されたら、SendKeysステートメントでENTERを送信します。 最後にSendKeysステートメントを利用するとNumLockがOFFになるのでそちらをONに直しています。 |
Message#1 2014年9月5日(金)02時11分 From: みらねうた | 返事 削除 変更 |
エクセルのVBAマクロを利用して、ホームページのポップアップ画面のOKボタンを押したいのですが、どのようにすればいいですか? ポップアップ画面はjavaScriptで処理されています。 htmlソースは以下になります。 「この内容で登録する」のボタンをクリックするとポップアップ画面が現れます。 こちらのクリック処理について、解決策を教えてください。 よろしくお願いします。 <div class="btn-area"> <ul><li><a class="btn-action" href="javascript:;" onclick="fnChangeAction('/admin/order/'); fnModeSubmit('search','',''); return false;"><span class="btn-prev">検索画面に戻る</span></a></li> <li><a class="btn-action" href="javascript:;" onclick="return fnFormConfirm(); return false;"><span class="btn-next">この内容で登録する</span></a></li> </ul></div> |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降