【问题标题】:VBA For Each and With Block Object Variable or With Block Variable not set Error 91VBA For Each and With Block Object Variable or With Block Variable not set Error 91
【发布时间】:2019-04-29 14:26:21
【问题描述】:

我正在尝试使用 VBA 在 Internet Explorer 的网页中填充 HTML 表格。我正在使用以下代码尝试输入一个值;字段具有唯一名称:

Dim objShellWins As SHDocVw.ShellWindows
Dim objIE As InternetExplorer
Dim objDoc As Object

For Each objIE In objShellWins   'Look at IE & Windows Explorer objects in shell
    With objIE
        'Look for URL matching strURL
        If (InStr(1, .LocationURL, [URL], vbTextCompare)) Then
            Set objDoc = .Document
            If (InStr(1, objDoc.Title, [Title], vbTextCompare)) Then
                objDoc.getElementsByName([Name])(0).Value = "Value"
            End If
        End If
    End With
Next

我收到错误 91:在 objDoc.getElementsByName 行上未设置对象变量或块变量,但 objDoc.Title 返回正确的字符串。关于如何解决这个问题的任何想法?

【问题讨论】:

  • 选择调试并在即时窗口? objDoc.getElementsByName([Name]).length 中执行以检查找到的节点数。
  • 你有没有设置为Microsoft Internet Controls的参考?
  • 如果可能的话,值得分享相关的 HTML,以使其对未来的读者更有用并帮助调试。

标签: html excel vba internet-explorer


【解决方案1】:

objDoc 不是导致错误的对象变量。 getElementsByName 返回一个 NodeList 对象(Nodes 的集合),getElementByName(...)(0) 返回一个 Node 对象。那是导致错误的对象“变量”(非常误导,因为它根本不是变量)。

@omegastripes 评论检查NodeList.length 属性是正确的第一步。然后我想你会发现要么拼错了名称,要么文档中没有具有该名称的元素。

【讨论】:

  • 谢谢,看来是问题所在,调用 getElementsbyName 时文档中没有具有该名称的元素。
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
相关资源
最近更新 更多