Код ошибки 91 Переменная объекта или С переменной блока не установлено - PullRequest
1 голос
/ 06 июля 2019

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

Строка ошибки в коде:

EnterName.value = Firstname

Я попытался войти в систему иэтот шаг успешен. Однако второго шага не было.

Public IE as Object
Public Entername as Object
Public HTMLdoc as Object

Sub Pink()
'logging in to webpage

   username1 = Activeworkbook.worksheets("Sheet1").range("B2").value
   password1 = Activeworkbook.worksheets("Sheet1").range("B3").value

' Opening IE explorer

Set IE =  New InternetExplorerMedium

With IE
  . Visible = true
  . navigate "website"
  while .Busy or .readyState<>4:DoEvents: Wend
End With

'Actual login
Dim Login as object
Dim password as Object

Set Login = HTML.getElementsByName("Username")(0)
Set password = HTML.getElementsByName("Password")(0)

Login.Value = username1
password.Value = password1

HTMLdoc.forms(0).submit

With  IE

while .Busy or .readyState<>4:DoEvents: Wend
End With

call Step2

End sub

************************************************************************
Sub Step2()

Firstname = Range("A8").value

lastName = Range("C8").value 

set  EnterName =  HTMLdoc.getElementsByName("PRIMARY")(0)

EnterName.value =  Firstname

End sub 

********************************************************************

IE11 Inspect Elements

<input name ="PRIMARY" tableindex="0" class="dijitReset dijitInputInner"
id  ="indium_view_form_ValidationTextbox_0" aria-invalid="false" aria-
required="true" type="text"  maxlenght="1000" autocomplete="off" data
dojo-attach-point="textbox,focusnode" value=""></input>

Я ожидал, что значение в диапазоне («A8») будет вставлено на веб-страницу IE.Однако я получаю ошибку 91. Переменная объекта или переменная блока не установлена ​​

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Я предлагаю вам проверить Переменная объекта не установлена ​​(Ошибка 91) : Существует два шага для создания переменной объекта.Во-первых, вы должны объявить переменную объекта.Затем вы должны назначить действительную ссылку на переменную объекта с помощью инструкции Set.

Итак, после создания объекта Htmldoc нам нужно назначить действительную ссылку.

Я попытался создать образец, используя следующий код, вы можете сослаться на него.

Public IE As Object
Public Entername As Object
Public Htmldoc As Object

Sub Test()

username1 = ThisWorkbook.Sheets("Main Page").Range("B2").Value
password1 = ThisWorkbook.Sheets("Main Page").Range("B3").Value

Dim Rank As Object
Set IE = CreateObject("InternetExplorer.application")
IE.Visible = True
IE.Navigate ("http://localhost:54382/HtmlPage47.html")
Do
    If IE.readyState = 4 Then
        Exit Do
    Else
    End If
Loop

Set Htmldoc = IE.document

Dim Login As Object
Dim password As Object

Set Login = Htmldoc.getElementsByName("Username")(0)
Set password = Htmldoc.getElementsByName("Password")(0)

Login.Value = username1
password.Value = password1

Htmldoc.forms(0).submit
With IE

While .Busy Or .readyState <> 4: DoEvents: Wend
End With

Call Step2

End Sub


Sub Step2()

Firstname = ThisWorkbook.Sheets("Main Page").Range("A8").Value

Set Entername = Htmldoc.getElementsByName("PRIMARY")(0)

Entername.Value = Firstname

End Sub

Код на веб-странице:

<form>
    <div>
        <input name="Username" id="Text1" type="text" /><br />
        <input name="Password" id="Text1" type="text" /><br />
        <input id="Submit1" type="submit" value="submit" /><br />
        <input name="PRIMARY" tableindex="0" class="dijitReset dijitInputInner" id="indium_view_form_ValidationTextbox_0" aria-invalid="false" aria-required="true" type="text" maxlenght="1000" autocomplete="off" datadojo-attach-point="textbox,focusnode" value=""></input>
    </div>
</form>
0 голосов
/ 06 июля 2019

Вы никогда не создаете экземпляр HTMLDoc как New HTMLDocument.Вы должны сделать это.Поэтому я ожидаю, что ваш код будет ошибаться до указанной строки.

Вы также ссылаетесь на переменную HTML, которую я не вижу объявленной или созданной.Я ожидаю, что эти две переменные должны быть только одной и передаваться второму подпункту в качестве аргумента.

HTML.getElementsByName("Username")(0)

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


Я бы также передавал HTMLDoc и рабочую таблицу в качестве аргументов для второго подпункта, а не с помощью открытых переменных.


И обратите внимание, что вы используете неявные ссылки Activesheet в качествене полностью определите диапазоны, так что это может привести к ошибкам.

Range("A8").Value

Вышеприведенное не имеет явной ссылки на лист.В следующем примере используется явная ссылка:

ThisWorkbook.Worksheets("Sheet1").Range("A8").Value
...