Excel VBA - 刷新选定的查询/连接

时间:2014-12-08 03:50:54

标签: excel-vba excel-2013 vba excel

场合

我有5个Workbook connections设置来自MS Access数据库的查询数据,我已经为他们指定了名称qry_1qry_2,...,qry_5

我在工作表上名为qry_Table的表中列出了这些查询名称的选择:

Query Name
----------
qry_1
qry_4
qry_5

我可以遍历表格(使用.listObjects)将每个查询名称作为string

问题

我可以遍历工作簿中的所有查询并刷新所有查询,但我似乎无法弄清楚如何选择和刷新表中列出的那些查询,即qry_1,{{1 }和qry_4

我希望能够qry_5查询对象,以便我也可以定义set字符串。

这可能吗?

备注

此处的代码显示了如何获取表格.Connection

Query Name中的每一行
qry_Table

要刷新工作簿中的所有查询,我可以使用

    dim wksControl As worksheet
    dim objList As ListObject

    set wksControl = worksheets("Control")    'the worksheet that contains 'qry_Table'
    Set objList = wksControl.ListObjects("qry_Table")

    With objList.ListColumns("Query Name").DataBodyRange

        For i = 1 To .Rows.count              
            str = .Rows(i)    'query name to refresh
            '***Required: Define the qry to refresh
            Set qry = .QueryTable(str)  '<~~ this code fails
            'code to .Refresh  BackgroundQuery:=False

        Next i
    End With

2 个答案:

答案 0 :(得分:3)

您需要按名称引用ListObject,而不是连接,然后访问其Querytable属性:

With wks.Listobjects(str).QueryTable

答案 1 :(得分:0)

使用str = .Rows(i)您将整行的范围分配给str,用str = .Cells(i,1).Value替换该行应该有效,因为它将在i行的第一列中返回值。