Я успешно подключился к текстовому файлу согласно заданному коду, используя опыт Get & Transform (Power Query) в Excel для подключения к текстовым файлам.Следующий базовый текстовый файл - Axis1.txt
, который периодически меняется.Затем я пошел, чтобы обновить таблицу запросов с последними данными.Я ссылался на следующие ссылки, чтобы узнать об обновлении таблиц запросов
Как ссылаться и обновлять QueryTable в Excel 2016 в VBA
Excel VBA / Обновить данные из определенного источникабез диалога
https://docs.microsoft.com/en-us/office/vba/api/excel.querytable.refresh
Теперь моя проблема .
Из всех перечисленных методов я смог добиться успеха в обновлении таблицы с последними данными, когда выбрана одна из ячеек таблицы запросов и задана следующая команда.
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Другие типы кодасинтаксис, на который ссылаются различные посты, встречается с ошибкой, упомянутой в каждой строке.
Sub reresh1()
'Sheet2.ListObject.QueryTable.Refresh BackgroundQuery:=False

'Sheets("Sheet2").QueryTables.Refresh BackgroundQuery:=False

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
'WORKS FINE
End Sub
Были также опробованы различные другие комбинации синтаксиса кода, но не удалось добиться успеха.
Sub TblImpV1()
' Macro1 Macro
ActiveWorkbook.Queries.Add Name:="axis1", Formula:= _but
"let" & Chr(13) & "" & Chr(10) & " Source = Csv.Document(File.Contents(""C:\mydirb\axis1.txt""),[Delimiter="" "", Columns=11, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Changed Type"" = Table.TransformColumnTypes(Source,{{""Column1"", Int64.Type}, {""Column2"", type date}, {""Column3"", type text}, {""Column4"", type text}, {""Column5"", type text}, {""Column6"", type number}, {""C" & _
"olumn7"", type number}, {""Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Column11"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Changed Type"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=axis1;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [axis1]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "axis1"
.Refresh BackgroundQuery:=False
End With
Range("B4").Select
End Sub
Я хочу избежать выбора.Хотя процедура предлагает перейти к таблице запросов любой ячейки и нажать кнопку обновления.Я считаю, что сообщения SO Experts по смежным вопросам должны быть правильными, и я делаю что-то глупое из-за моих элементарных знаний VBA Coding.Любая помощь или руководство в этом вопросе приветствуется.Был бы признателен за полный связанный синтаксис вместо одной строки.
РЕДАКТИРОВАТЬ
Я мог бы найти решение, чтобы избежать выбора.Следующая строка кода работает нормально, если B2
является ячейкой в таблице запросов.
Sheets("Sheet2").Range("B2").ListObject.QueryTable.Refresh BackgroundQuery:=False
Однако, если у кого-то есть лучшее решение, это приветствуется.