エクセルVBAでポップアップ画面の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に直しています。 |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。