Как превратить имя запроса в переменную - PullRequest
0 голосов
/ 27 марта 2020

Мне нужно делать запросы с перепиской, но я действительно придерживался имен запросов и должен каждый раз менять их вручную, например, Name_1, Name_2 и c. Оригинальный код выглядит следующим образом:

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

Том делает его динамичным c, я пришел с чем-то вроде этого

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 голосов
/ 27 марта 2020

Похоже, я наконец-то нашел ответ. Текущий запрос лучше удалить в конце подпрограммы, а не пытаться сделать его динамическим c с помощью переменной

ActiveWorkbook.Queries("Name_1").Delete

Удалить запрос из книги Excel с помощью Vba

Спасибо за ваш вклад, ребята, все равно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...