【问题标题】:Error code 91 Object variable or With block variable not set错误代码 91 对象变量或未设置块变量
【发布时间】:2019-11-16 21:01:39
【问题描述】:

我正在尝试执行网络自动化,其中涉及登录并在我的电子表格上搜索特定文本到网页上的特定框。 我在将值粘贴到网页中的搜索框的第二步中遇到错误。

代码中的错误行:

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。对象变量或未设置块变量

【问题讨论】:

  • 更正:设置登录 = HTMLdoc.getElementsByName("Username")(0) 设置密码 = HTMLdoc.getElementsByName("Password")(0)

标签: html excel vba web-scraping internet-explorer-11


【解决方案1】:

您永远不会将HTMLDoc 实例化为New HTMLDocument。你需要这样做。因此,我希望您的代码在上述行之前出错。

您还引用了HTML 变量,我没有看到它声明或实例化。我希望这两个变量应该只是一个并作为参数传递给第二个子。

HTML.getElementsByName("Username")(0)

在所有模块的顶部使用Option Explicit 来检查这些错误。


我还将HTMLDoc 和工作表作为参数传递给第二个子程序,而不是使用公共变量。


请注意,您正在使用隐式 Activesheet 引用,因为您没有完全限定您的范围,所以这很容易出错。

Range("A8").Value

以上没有明确的工作表参考。以下示例使用显式引用:

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

【讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 我仔细查看了 html 代码,我相信你是对的,它在 iframe 中。
  • 你能帮我解决这个问题吗,因为我是 iframe 的新手。
【解决方案2】:

我建议你查看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>

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多