我正在尝试使用excel中的VBA返回包含网页中所有<td>
元素的对象。
这个代码在一个Sub
中都有效,但现在我试图将其分解为函数以改进readablilty和调试。
该对象在我的函数中正确创建,但似乎没有正确返回。
这是功能:
Public Function getTablesFromPage(url As String) As Object
Dim HTML As Object
Set HTML = CreateObject("htmlFile")
With CreateObject("WinHttp.WinHttpRequest.5.1")
.SetAutoLogonPolicy (0)
.Open "GET", url
.send
If .Status = "200" Then
HTML.body.innerHTML = .responseText
Set getTablesFromPage = HTML.getElementsByTagName("td")
Else
MsgBox "HTTP " & .Status
End If
End With
End Function 'at this point a watch on getTablesFromPage shows the correct object
这就是我在Sub
中调用它的方式:
Dim TDelements As Object
Set TDelements = getTablesFromPage(url)
'at this point TDelements is an empty object
这是我第一次编写任何VBA,正如我所说,当它全部在同一个Sub
内时,这一切都有效,所以它必须是我返回对象的方式吗?
答案 0 :(得分:1)
我相信这是因为您已将HTML声明为函数内的对象,因此它不是主程序的inscope对象。您需要将HTML声明为模块级变量,或者在调用过程时将其包含为“by Ref”参数