0

我有一个名为“TEMPLATE”的工作表,其中有一个 PowerQuery“TEMPLATE_Query”,它可以工作。Powerquery 从网站请求 CSV 文件。

现在,在循环中使用 VBA,我制作了 N 个此工作表的副本,从而生成名为“Template (X)”的工作表和名为“TEMPLATE_Query (X)”的 Powerquery。X=1..N。在我的 VBA 代码中,我修改了 Powerquery 公式以请求不同的 CSV 文件。到这里为止,一切正常。Powerquery 在所有这些工作表中运行并接收不同的 CSV 文件。

这是问题所在:

当我在创建副本的循环期间使用 VBA 更改工作表的名称时,Powerquery 之后会失败。说“下载失败,仅连接”。所以显然 Powerquery 不再引用正确的工作表名称了。当我重命名 Powerquery 并使工作表名称保持不变时,也会发生同样的情况。

我的目标是在我的 VBA 循环中重命名工作表和 Powerquery。

但是为什么这会破坏查询?

4

1 回答 1

1

不久前我遇到了同样的问题。如果我没记错的话,它会中断,因为查询仍然想访问具有不同名称的东西。我不知道为什么重命名查询时 Excel 不会更改引用。如果您通过右键单击手动重命名它,它甚至不会自动更改它。如果您查看查询,右键单击它,然后切换到属性或中间选项卡的名称,您可以看到一些详细信息。

长话短说,这就是我修复我的方法:

Sub Create_new_connection()

'On Error Resume Next
'Count the current amount of queries and save that number to refer to it later
QueryCount = ThisWorkbook.Queries.Count

'Copy the template and rename it
ThisWorkbook.Sheets("Template").Copy after:=ThisWorkbook.Sheets("Template")
ThisWorkbook.Sheets(3).Name = "Put a name here"

'Change the name of the query
ThisWorkbook.Queries.Item(QueryCount + 1).Name = "New Query Name"

'Change the names of the new table
ThisWorkbook.Sheets(3).ListObjects(1).Name = "I had a table I wanted to rename"

'Change the formula of the new connection
NewFormula = Replace(ThisWorkbook.Queries.Item(1).Formula, ThisWorkbook.Sheets("Create New List").ListObjects("Template").DataBodyRange(1, 1), ThisWorkbook.Sheets("Create New List").ListObjects("FAUF").DataBodyRange(1, 1))
ThisWorkbook.Queries.Item(QueryCount + 1).Formula = NewFormula

'Connect the new table to the new connection and
ThisWorkbook.Sheets(3).ListObjects(1).QueryTable.WorkbookConnection = "Abfrage - " & ThisWorkbook.Queries.Item(QueryCount + 1).Name
ThisWorkbook.Sheets(3).ListObjects(1).QueryTable.Connection = "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & """" & ThisWorkbook.Queries.Item(QueryCount + 1).Name & """" & ";Extended Properties=" & """" & """"
ThisWorkbook.Sheets(3).ListObjects(1).QueryTable.CommandText = "SELECT * FROM [" & ThisWorkbook.Queries.Item(QueryCount + 1).Name & "]"

'Refresh the new connection
ThisWorkbook.Sheets(3).ListObjects(1).QueryTable.Refresh BackgroundQuery:=False

End Sub

倒数第二组,修改连接的 3 个是重要的。这是在德语 Excel 上,因此您可能需要更改“Abfrage -”位以适合您的语言。正确更改WorkbookConnection、Connection 和CommantText 非常重要。

于 2020-01-25T11:59:19.350 回答