Excel VBA,从函数返回的空对象

我想在Excel中使用VBA返回一个包含所有<td>元素的对象。 这个代码在一个Sub中工作,但是现在我试图把它分解成函数来提高可读性和debugging性。 该对象正确地在我的函数中创build,但似乎没有被正确返回。

这是function:

 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 ,所以它必须是关于我返回对象的方式?

我相信这是因为你在你的函数中声明了HTML作为一个对象,所以它不是你主程序的一个inscope对象。 您需要将HTML声明为模块级variables,或者在调用过程时将其作为“通过参考”参数来包含它