【问题标题】:VBA + IE Automation - can't get Element IDVBA + IE 自动化 - 无法获取元素 ID
【发布时间】:2020-03-25 00:15:09
【问题描述】:

我正在尝试从公司内部网站上抓取一些信息。我的代码能够启动一个新的 IE 窗口并成功导航到该页面,但是当我尝试将数据输入到一个框中时,我不断收到错误。

我根据阅读过的帖子切换了各种内容,但总是出现某种错误。

对于下面发布的代码,最后一行是这个错误:

Object Variable or With Block Not Set

这是我的代码:

Sub PerformancePull()

    Dim appIE As Object
    Dim sURL As String
    Dim StartDate As Variant
    Dim MyDoc As HTMLDocument

    Set appIE = New InternetExplorerMedium


    sURL = "website"

    With appIE
        .navigate sURL
        .Visible = True
    End With

    Do While appIE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Set MyDoc = appIE.document

    Set StartDate = MyDoc.getElementById("ct100_assoc_tbEndDate")
    StartDate.Value = "3/25/2020"

End Sub

编辑:

下面是一段 HTML 代码,用于标识我要捕获的 ID:

【问题讨论】:

  • 可能包含问题中包含相关 HTML 的相关页面的源部分,或者至少包含指向该页面的链接......如果没有这些东西,任何人都无法帮助你。
  • 使用适当的页面加载等待和可能的定时循环来显示由 id 定位的项目(假设您可以使用 id 直接访问)例如stackoverflow.com/a/58445978/6241235
  • 谢谢 - 我在自己的故障排除的早期迭代中尝试了等待方法,但仍然没有任何作用。它一定与我要访问的网站有关。这是一个公司内部网站。我已经发布了一个 HTML 片段,它标识了我正在尝试与之交互的元素。请让我知道查看 HTML 的任何其他部分是否会有所帮助。再次感谢。

标签: vba internet-explorer getelementbyid


【解决方案1】:

试试下面的

删除这个

Set StartDate = MyDoc.getElementById("ct100_assoc_tbEndDate")
StartDate.Value = "3/25/2020"

并用这个替换它

With MyDoc
    .getElementById("ct100_assoc_tbEndDate").Value = "3/25/2020"
End With

【讨论】:

  • 嗨 - 谢谢你的建议。我试过了,但没有用。它一定与我要访问的网站有关。这是一个公司内部网站。我已经发布了一个 HTML 片段,它标识了我正在尝试与之交互的元素。请让我知道查看 HTML 的任何其他部分是否会有所帮助。再次感谢。
  • 我在一个模块之外运行它。
  • 我的意思是 Excel、Outlook? 2010 年或 ...@Matt
  • 很抱歉。 Excel 2016。谢谢
  • @Matt 没关系,还有一件事-您可以将 html 发布为文本而不是图像,还可以发布完整的 html 示例。 &lt;td style="test-align: center;"&lt;/td&gt;
【解决方案2】:

我尝试在我这边测试您的代码,它运行良好,没有任何错误。以下是测试结果。

我建议您尝试访问该元素并分配如下值以检查它是否有效。

appIE.document.getElementById("ct100_assoc_tbEndDate").Value = "3/25/2020"

如果问题仍然存在,请告诉我们您的测试结果,然后我们将尝试提供进一步的建议。

【讨论】:

  • 谢谢 - 我的代码仍然无法正常工作。它必须与我要访问的网站有关。这是一个公司内部网站。我发布了一个 HTML 片段,它标识了我正在尝试与之交互的元素。请让我知道查看 HTML 的任何其他部分是否会有所帮助。再次感谢。
  • 您已将 StartDate 声明为 Variant。它可能没有正确分配该对象。尝试将 StartDate 声明为 HTMLInputElement,然后再次尝试运行您的代码以查看它是否有效。
  • 感谢您的建议。它按照您的建议进行,并且在最后一行(StartDate.Value =“3/25/20”)上仍然收到相同的错误。不过,我相信您的建议是正确的。正上方的行似乎没有正确设置该变量。还有其他想法吗?
  • 您是否可以在任何其他机器上测试此代码?我认为代码是正确的,因为我还在 Win 10 操作系统上使用 Excel 2016 对其进行了测试,您可以看到它运行良好。一些问题可能是由 VBA 编辑器引起的。
猜你喜欢
  • 2019-02-26
  • 2018-03-27
  • 1970-01-01
  • 2013-05-17
  • 2019-04-16
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多