使用连接QueryTables而不创建/添加它

时间:2014-10-13 21:32:29

标签: vba excel-vba excel

我每天通过QueryTables在Excel中访问不同的FTP文件。我不想在Excel的连接中维护此查询表。

我试图找到一种使用QueryTables下载此文件的方法,而不保存连接。但我没有找到办法做到这一点。

现在我使用QueryTables.add()并在使用后删除它,但连接不会消失。 我的代码:

Dim qt as Variant

Set MySheet = Sheets("MyTempSheet")
Set qt = MySheet.QueryTables.Add(Connection:=path, Destination:=Cells(2, 1))

With qt
    .Name = "MyTempConn"
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells
    .SaveData = False
    .WebSelectionType = xlAllTables
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
End With

qt.Delete 'won't work. 

PS:我不想删除所有查询(下面的代码),因为我有一些我想保留的连接

For Each ws In ActiveWorkbook.Worksheets   
  For Each qt In ws.QueryTables   
    qt.Delete   
  Next qt   
Next ws   

1 个答案:

答案 0 :(得分:1)

qt.Delete不起作用,因为qt不是实际的查询表,而是对QueryTables堆栈的加法操作。由于没有定义qt的用处,因此您可以跳过该部分(也不需要使用变体类型),然后可以进行MySheet.QueryTables.Add(Connection:=path, Destination:=Cells(2, 1))

要删除查询,您可以删除QueryTables堆栈MySheet.QueryTables(1).Delete的顶部(当前查询索引始终为1,将较早的查询推回较高的索引),或者,如果要确保它是您的查询,您可以做到

For Each qt In MySheet.QueryTables
    If Left(qt.Name, 10) = "MyTempConn" Then qt.Delete
Next qt

这仅检查MySheet的查询。之所以有Left部分是因为,如果以前有一个同名的附加项,则新查询将被重命名为MyTempConn_1,依此类推。此代码将删除所有以前添加的具有相同名称的连接。