如何从网页导入查询表并将其分配给变量(而不是将整个表格转换为电子表格)?

时间:2018-06-14 20:51:22

标签: excel-vba web-scraping vba excel

我在使用Excel VBA时遇到了一些麻烦,想知道是否有人可以帮助我。

我正在从网页导入表格,我想知道是否可以将表格分配给变量,而不是将表格发送到电子表格。

我正在使用的命令是:

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://www4.bcb.gov.br/pec/poupanca/poupanca.asp", _ 
     Destination:=Range("$A$1"))
    .WebSelectionType = xlAllTables
    .Refresh BackgroundQuery:=False
End With

这样做,表被导入到单元格A1。 我宁愿导入一个变量以在我的代码中使用,而不将表格中的所有数据绘制到电子表格中。

有可能吗?

1 个答案:

答案 0 :(得分:0)

Querytable不是要将信息存储在变量中,而是写入工作表。

如果要使用变量,请考虑如下方法(GET请求,其中表位于变量hTable中)

Option Explicit
Public Sub GetTable()
    Dim sResponse As String, hTable As Object

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "http://www4.bcb.gov.br/pec/poupanca/poupanca.asp", False
        .send
        sResponse = StrConv(.responseBody, vbUnicode)
    End With

    sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))

    With CreateObject("htmlFile")
        .Write sResponse
        Set hTable = .getElementsByTagName("table")(0)
    End With
    MsgBox TypeName(hTable)
End Sub

注意:方法改编自我的回答here。一般方法的原作者我无法归因。