excel - 从函数返回的 VBA 对象不可用
问题描述
在函数中创建的自动化对象可以在这个函数中使用就好了。但是当我尝试从这个函数返回它然后在另一个函数中使用它时变得不可用。
我知道将对象传递给应该由 ByRef 分配给哪个函数返回值的技巧购买我想知道 VBA 不允许在我的情况下直接从函数返回对象。
谢谢。
UPD。querySelectorAll()
尽管它是“静态”列表,但同样的问题。
Function GetElementByClass(Html As String, ClassName As String) _
As IHTMLElementCollection
Dim WebPage As MSHTML.HTMLDocument
Set WebPage = New MSHTML.HTMLDocument
WebPage.body.innerHTML = Html
'GetElementByClass is valid object
Set GetElementByClass = WebPage.getElementsByClassName(ClassName)
End Function
Sub GetDataFromPage()
Dim Element As IHTMLElementCollection
'Element is Nothing here. Why?
Set Element = GetElementByClass(Html, "relative")
End Sub
解决方案
我认为这是因为它WebPage
是一个局部变量,GetElementByClass
它在End Function
. 而且因为您返回Set GetElementByClass = WebPage.getElementsByClassName(ClassName)
的是该WebPage
对象的成员,所以它也会在函数结束时消失。
1. 解决方法
将您的变量声明为公开的,这样它就不会被破坏。
Option Explicit
Global WebPage As MSHTML.HTMLDocument
Function GetElementByClass(Html As String, ClassName As String) _
As IHTMLElementCollection
Set WebPage = New MSHTML.HTMLDocument
WebPage.body.innerHTML = Html
'GetElementByClass is valid object
Set GetElementByClass = WebPage.getElementsByClassName(ClassName)
End Function
2. 解决方法
或者创建变量并将其作为参数传递WebPage
:GetDataFromPage
Option Explicit
Function GetElementByClass(WebPage MSHTML.HTMLDocument, ClassName As String) _
As IHTMLElementCollection
'GetElementByClass is valid object
Set GetElementByClass = WebPage.getElementsByClassName(ClassName)
End Function
Sub GetDataFromPage()
Dim WebPage As MSHTML.HTMLDocument
Set WebPage = New MSHTML.HTMLDocument
WebPage.body.innerHTML = Html
Dim Element As IHTMLElementCollection
'Element is Nothing here. Why?
Set Element = GetElementByClass(WebPage, "relative")
End Sub
检查这是否有效。
推荐阅读
- python - 去除第一个字母数字字符前面的特殊字符
- javascript - 将过滤后的 html 表格数据下载到 csv 文件
- intellij-idea - 如何在 Intellij IDEA 2019.1.3 中推送修改提交,它总是在 gerrite 中创建两个独立的提交
- java - 在 JSP 中显示字符串值
- mysql - 直接创建一个只有年月VS索引日期时间/时间戳列的新索引列
- vuejs2 - V-textarea自定义高宽变化?
- ansible - 如何在 ansible playbook 中干净地编辑 sshd_config 以获取基本安全选项?
- node.js - 使用外部 babel 配置会破坏节点/反应应用程序 - 内部服务器错误
- asp.net - 我可以在 React Native 中调用 ASP.NET Web API 吗?
- spring - 当我使用 spring-boot-websocket 时,有很多损坏的管道,我怎样才能避免这个错误以及它发生的原因