Почему код не Go мимо пожарных («Обмен»), если всплывающее окно появляется после - PullRequest
0 голосов
/ 17 февраля 2020

enter image description here Я пытаюсь ввести значение в текстовое поле, а затем вызвать событие «onchange», которое работает. Но после этого я получаю всплывающее окно, и код не перемещается за пределы кода onchnage, поэтому я не могу нажать на кнопку «ОК» всплывающего окна.

<INPUT onchange=javascript:AcctId_ONCHANGE(); id=debAcctId class=textfieldfont style="WIDTH: 150px" maxLength=16 name=nefrtg.debAcctId fdt="String" enabled>

<INPUT onclick="javascript:return nefrtg_det_ONCLICK14(this,this);" id=Go class=sbutton type=button value=Go name=Go ?>   

Есть ли способ нажать на эту кнопку в той же строке кода или есть какой-либо другой метод?

ie.Document.frames(0).frames(0).frames(0).Document.getElementById("debAcctId").Value = strDebAcc

ie.Document.frames(0).frames(0).frames(0).Document.getElementById("debAcctId").FireEvent ("onchange")

    While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE
        DoEvents
        If ie.Busy Then
            DoEvents
            hWND = FindWindow(vbNullString, "Message from webpage")
            If hWND <> 0 Then childHWND = FindWindowEx(hWND, ByVal 0&, "Button", "OK")
            If childHWND <> 0 Then SendMessage childHWND, BM_CLICK, 0, 0
        End If
    Wend

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020
Private Sub ClickOKButton() 
    Dim strScript As String, sFileName As String, wsh As Object
    Set wsh = VBA.CreateObject("WScript.Shell")
    strScript = "WScript.Sleep 5000" & vbCrLf & _
                "Dim wsh" & vbCrLf & _
                "Set wsh = CreateObject(""WScript.Shell"")" & vbCrLf & _
                "wsh.SendKeys ""{ENTER}""" & vbCrLf & _
                "Set wsh = Nothing"
    sFileName = wsh.ExpandEnvironmentStrings("%Temp%") & "\zz_automation.vbs"
    Open sFileName For Output As #1
    Print #1, strScript
    Close #1
    wsh.Run """" & sFileName & """"
    Set wsh = Nothing
End Sub

Я запустил выше сценарий, прежде чем запустить 'onchange'. Это работает, но я все еще ищу лучший ответ для вышеупомянутой проблемы.

0 голосов
/ 18 февраля 2020

Я понимаю, что ваш код VBA застревает, когда на странице отображается предупреждающее сообщение.

Я пытался найти решение или обходной путь, но не получил никаких рабочих примеров.

I обнаружил в одном старом потоке, что пользователю нужно создать экземпляр IE из другой книги, найти окно msg и закрыть его. Я лично считаю, что это не практическое решение. Кроме этого, я не получил никакого решения для VBA.

В ходе дальнейшего поиска я обнаружил, что если вы можете использовать веб-драйвер Selenium для автоматизации браузера IE, то есть решение этой проблемы. .

Чтобы нажать кнопку «ОК» оповещения с помощью Selenium:

driver.switchTo().alert().accept();

Нажать на кнопку «Отмена» оповещения использование Selenium:

driver.switchTo().alert().dismiss();

Ссылка:

Обработка предупреждений и всплывающих окон в Selenium WebDriver

Так что вы можете подумать об этом подходе в качестве альтернативы для вашего подхода VBA.

...