我正在尝试执行网络自动化,这涉及登录并在电子表格中的特定文本上搜索特定文本到网页上的特定框。 我在第二步遇到错误,将值粘贴到网页的搜索框中。
代码中的错误行:
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>
我希望将range(“ A8”)中的值粘贴到IE网页上。但是我得到一个错误91。对象变量或未设置块变量
答案 0 :(得分:0)
您永远不会将HTMLDoc
实例化为New HTMLDocument
。您需要这样做。因此,我希望您的代码在提到的行之前出错。
您还引用了HTML
变量,但看不到已声明或实例化的变量。我希望这两个变量应该只是一个,并作为参数传递给第二个子变量。
HTML.getElementsByName("Username")(0)
使用所有模块顶部的Option Explicit
检查这些错误。
我还将HTMLDoc
和工作表作为参数传递给第二个子控件,而不是使用公共变量。
请注意,由于您未完全限定范围,因此您正在使用隐式Activesheet
引用,因此容易出错。
Range("A8").Value
上面没有明确的工作表参考。下面的示例使用显式引用:
ThisWorkbook.Worksheets("Sheet1").Range("A8").Value
答案 1 :(得分:0)
我建议您检查Object variable not set (Error 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>