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

时间:2014-12-17 09:30:43

标签: excel vba excel-vba

我正在尝试使用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内时,这一切都有效,所以它必须是我返回对象的方式吗?

1 个答案:

答案 0 :(得分:1)

我相信这是因为您已将HTML声明为函数内的对象,因此它不是主程序的inscope对象。您需要将HTML声明为模块级变量,或者在调用过程时将其包含为“by Ref”参数