我每天通过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
答案 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
,依此类推。此代码将删除所有以前添加的具有相同名称的连接。