Как исправить 'Ошибка выполнения 91: переменная объекта или переменная блока не установлена' с помощью vba Excel? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть небольшой раздел кода для автоматизации входа на определенный веб-сайт, который иногда работает, а иногда выдает ошибку времени выполнения 91, говоря, что переменная объекта или переменная блока не установлена. Как мне решить эту проблему?

Sub AutoLogin()
    Const Url = "https://www.tymetrix360.com/Common/Pages/LoginPage.aspx? 
ReturnUrl=%2f"

    Dim userName As String, password As String, LoginData As Worksheet
    Set LoginData = ThisWorkbook.Worksheets("Sheet1")
    userName = LoginData.Cells(1, "A").Value
    password = LoginData.Cells(2, "A").Value

    Dim ie As Object

    Set ie = CreateObject("InternetExplorer.Application")


        ie.navigate Url
        ie.Visible = True

        ieBusy ie

        ie.Document.all.Item("LoginTextBox").Value = userName
        ie.Document.all.Item("PasswordTextBox").Value = password

        ie.Document.all.Item("LoginButton").Click

End Sub

Sub ieBusy(ie As Object)
    Do While ie.Busy
        DoEvents
    Loop
End Sub

1 Ответ

0 голосов
/ 09 ноября 2019

Как насчет проверки того, существует ли элемент на странице, путем проверки, создан ли объект?

Итак, Set user_id_element = ie.document.getElementById("user_id"), затем проверьте IsObject(user_id_element), и если это будет продолжаться, то если он не будет зациклен до появления? было бы желательно иметь какие-то условия выхода на случай, если они никогда не появятся.

примерно так:

Sub AutoLogin()
    Const Url = "https://www.campus.ie.edu"

    Dim userName As String, password As String, LoginData As Worksheet
    Set LoginData = ThisWorkbook.Worksheets("Sheet1")
    userName = LoginData.Cells(1, "A").Value
    password = LoginData.Cells(2, "A").Value

    Dim ie As Object

    Set ie = CreateObject("InternetExplorer.Application")


        ie.navigate Url
        ie.Visible = True

        ieBusy ie

        Debug.Print ie.locationurl
        If InStr(1, ie.locationurl, "portal") > 0 Then
            'Already logged in
        Else
            'Need to log in
            Do While Not IsObject(ie.document.getElementById("user_id"))
                'Check if the element is present, otherwise loop and wait
                ieBusy ie
            Loop

            ie.document.getElementById("user_id").Value = userName
            ie.document.all.Item("password").Value = password

            'One way or another submit the form
            'ie.document.getElementById("password").Focus
            'Application.SendKeys "{ENTER}" 'Submit form

            ie.document.forms("login").submit
            'ie.Document.getelementbyid("login").Click
        End If

End Sub

Sub ieBusy(ie As Object)
    Do While ie.Busy
        DoEvents
    Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...