执行PowerQuery时记录的宏:VBA代码的意外结果



我使用PowerQuery仅将4个查询存储为连接,然后将它们合并追加到两个表中。这个动作被记录到一个宏中,这样我就可以在将来使用它来重复相同的过程。我在这里附上了由宏记录生成的VBA代码的相关部分。我发现了两个我没有预料到的问题,我想找到一个解决方案。

首先,工作簿由其实际的完整文件名调用,而不是诸如"currentworkbook"或类似(见第二行)

Workbooks( _
"RP-DM_Survey123_Formatting_Template_March_2021_Copy4_PowerQuery.xlsm"). _
Connections.Add2 "Query - Trees_Query", _
"Connection to the 'Trees_Query' query in the workbook.", _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Trees_Query;Extended Properties=""""" _
, "SELECT * FROM [Trees_Query]", 2

其次,由查询生成的表存储到我在宏记录期间命名的新工作表中(在本例中,名称是'PruningQuery'),并且我希望在下次运行宏时进行命名。相反,创建的表将进入名称为"Sheet6","Sheet7"或该工作簿中最后创建的工作表后面的任何数字的新工作表。

ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=PruningQuery;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [PruningQuery]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "PruningQuery"
.Refresh BackgroundQuery:=False
End With
在这两个问题上的任何帮助或启示将是非常感激的。谢谢:)

谢谢@BigBen。我改变了ThisWorkbook.Connections.Add2 "Query..."等的行,它工作得很好。

相关内容