2016-06-24 20 views
3

クエリテーブルを作成するコードがあります。それを作成した後、私は必要なデータを取り出して、そのクエリを実行します。私はすぐにそれを削除したいので、スペースを取る周りにぶら下がってクエリテーブルの束をしたくないです。私は使用しますExcel VBAを使用してワークシートのクエリを完全に削除する

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 
+0

なぜ直接その接続を変更しませんか?それを削除して再作成するのではなく、直接変更すると1つのステップで実行されます... –

+0

Dirkありがとうございます。これは良いアイデアです、私は今それをやろうとします:) –

答えて

0
For Each qr In ThisWorkbook.Queries 
    qr.Delete 
Next qr