如何将查询名称转换为变量

时间:2020-03-27 06:56:16

标签: sql vba

我需要进行重复查询,但我确实卡住了查询名称,每次都必须手动更改它们,例如Name_1,Name_2等。原始代码如下:

ActiveWorkbook.Queries.Add Name:="Name_1", Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "    Source = Folder.Files(""C:\EXCHANGER\LastStage BOX"")
Sheets.Add After:=Sheets(1)
Sheets(2).Name = "INDEX"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Name_1"";Extended Properties=""""" _
    , Destination:=Range("$A$1")).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array("SELECT * FROM [Name_1]")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = "Name_1"
    .Refresh BackgroundQuery:=False
End With

Tome使它充满活力,到目前为止,我已经有了类似的东西

Dim i As Integer
i = 1
ActiveWorkbook.Queries.Add Name:=i, Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "    Source = Folder.Files(""C:\EXCHANGER\LastStage BOX"")

Sheets.Add After:=Sheets(1)
Sheets(2).Name = "INDEX"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=i;Extended Properties=""""" _
    , Destination:=Range("$A$1")).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array("SELECT * FROM [i]")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = i
    .Refresh BackgroundQuery:=False
End 

并且代码滚动正常,直到出现

.ListObject.DisplayName = i

仅处理字符串。对此有任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

好像我终于找到了答案。最好删除子查询末尾的当前查询,而不是尝试通过变量使其动态化

ActiveWorkbook.Queries("Name_1").Delete

Delete a query from excel workbook with Vba

谢谢大家的投入!