2014-12-17 5 views
0

Я пытаюсь вернуть объект, содержащий все элементы <td> с веб-страницы, используя VBA в excel. Этот код работал, когда все в одном Sub, но теперь я пытаюсь разбить его на функции для улучшения readablilty и отладки. Объект правильно создан в моей функции, но, похоже, не возвращается правильно.Excel VBA, пустой объект, возвращаемый из функции

Это функция:

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

Попробуйте поместить свой «Dim HTML As Object» вверху (из функции), это должна быть глобальной переменной в этом случае. –

ответ

1

Я считаю, что это связано с тем, что вы объявили HTML как объект внутри своей функции, поэтому он не является объектом инцеобата для вашей основной процедуры. Вам нужно либо объявить HTML как переменную уровня модуля, либо включить его как параметр «по ссылке» при вызове вашей процедуры.

+0

Выполнение TDelements 'ByRef' функции (теперь под). Кроме того, настройка HTML как переменной уровня модуля работала, но было неправильно объявлять такие переменные. –

Смежные вопросы