2
関数からHTMLElementCollectionを返そうとしています。しかし、function-wiseはすべて動作する必要がありますが、コードが呼び出し側のサブプログラムに戻ると、関数出力 "myTable"に割り当てられた変数に "<変数がありません"と表示されます。私は、同じ結果を持つscripting.dictionaryの一部としてコレクションを戻してみました。VBA関数がHTMLElementCollectionオブジェクトを返さない
何か助けていただければ幸いです。皆さんありがとう。いくつかのテストの後
Sub updateReports()
'//Function gathers latest report information and adds to sheets("Reports")
'//URL
Dim strURL As String
strURL = "http://www.ndbc.noaa.gov/station_page.php?station=62103"
Dim myTable As HTMLElementCollection
Set myTable = getTable(strURL)
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'From here on, "myTable" listed as '<No Variables>'.
'HTMLElementCollection not sucessfully returned.
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
End Sub
Public Function getTable(strURL As String) As Variant
'//Downloads HTML Table from strURL
'//Create HTTP Object
Dim oXMLHTTP As Object
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
oXMLHTTP.Open "GET", strURL, False
oXMLHTTP.send
Dim HTMLDoc As New HTMLDocument
If oXMLHTTP.Status = 200 Then
HTMLDoc.body.innerHTML = oXMLHTTP.responsetext
Set getTable = HTMLDoc.getElementsByTagName("tr")()
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'Under "getTable" call stack, getTable shows correct object (HTMLElementCollection)
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
End If
End Function
こんにちはアドリアーノ。応答していただきありがとうございます。 私はあなたが言ったことを試してみました。私は一度に1つの修正を加えて、問題を正確に特定しました。 メインサブのHTMLDocumentの初期化であり、これをパラメータとして関数に渡しました。私はそれがライブラリを使用したい場合は、HTMLオブジェクトの本体を最初にサブ内で初期化する必要があると思います。 とにかく、ありがとう! – Soulwake
これは単なる推測ですが、関数内でHTMLDocを初期化すると、関数を終了するときにこのオブジェクトが破棄されると思います。そのため、HTMLDocオブジェクトが破棄されたため、myTableはNullでgetElementsByTagNameを呼び出そうとします。 mainのオブジェクトを初期化することでそれを訂正し、実行の終わりまで生き続けるでしょう。 –