通过Excel VBA完全删除工作表查询

通过Excel VBA完全删除工作表查询,vba,excel,Vba,Excel,我有创建查询表的代码。在创建它之后,我取出我想要的数据,然后我就完成了查询。我不想让一堆查询表占用空间,所以我想立即删除它。我用 QueryTables.Delete ActiveWorkbook.Connections.Item(i).Delete 问题是查询表连接仍然存在。因此,如果我尝试使用相同的名称进行另一个查询,它会告诉我已经存在一个查询,但它无法进行查询 我希望该表的所有记录都彻底消失 这是我的密码: Sub Macro8() Dim currency1 As String D

我有创建查询表的代码。在创建它之后,我取出我想要的数据,然后我就完成了查询。我不想让一堆查询表占用空间,所以我想立即删除它。我用

QueryTables.Delete

ActiveWorkbook.Connections.Item(i).Delete
问题是查询表连接仍然存在。因此,如果我尝试使用相同的名称进行另一个查询,它会告诉我已经存在一个查询,但它无法进行查询

我希望该表的所有记录都彻底消失

这是我的密码:

Sub Macro8()

Dim currency1 As String
Dim currency2 As String

currency1 = ActiveSheet.Range("currency1")
currency2 = ActiveSheet.Range("currency2")

Range("clear").Select
Selection.ClearContents

ActiveWorkbook.Queries.Add Name:="FXFWD", Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "    Source = Web.Page(Web.Contents(""http://www.investing.com/currencies/" & currency2 & "-" & currency1 & "-forward-rates""))," & Chr(13) & "" & Chr(10) & "    Data0 = Source{0}[Data]," & Chr(13) & "" & Chr(10) & "    #""Changed Type"" = Table.TransformColumnTypes(Data0,{{"""", type text}, {""Name"", type text}, {""Bid"", type number}, {""Ask"", type number}, {""High"", type number}, {""Low"", type number}, {""Chg."", type number}, {""Time""," & _
    " type text}})," & Chr(13) & "" & Chr(10) & "    #""Removed Columns"" = Table.RemoveColumns(#""Changed Type"",{""""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Removed Columns"""
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "Book1"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=FXFWD" _
    , Destination:=Range("$A$1")).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array("SELECT * FROM [FXFWD]")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = False
    .ListObject.DisplayName = "FXFWD"
    .Refresh BackgroundQuery:=False
End With

Sheets("Book1").Rows("1:33").Copy
Sheet1.Rows("18").PasteSpecial xlPasteValues
Sheets("Book1").Select

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim con As Object
Dim ws As Worksheet
Dim qryT As QueryTable

For Each con In ThisWorkbook.Connections
    con.Delete
Next con
For Each ws In ThisWorkbook.Worksheets
    For Each qryT In ws.QueryTables
         qryT.Delete
    Next qryT
Next ws

Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Sheet1.Select
End Sub

为什么不直接改变这种联系呢?与其删除并重新创建它,直接的更改可以一步完成…谢谢你,德克。这是个好主意,我现在就试着这么做:)
For Each qr In ThisWorkbook.Queries
    qr.Delete
Next qr