我在 Excel for Microsoft 365 中使用 Power Query。我使用 VBA 而不是图形界面来执行 Power Query 操作。
假设我有一个现有的工作簿,该工作簿包含两个表 和Source_t
(分别Sink_t
在名为Source_w
和 的工作表中Sink_w
),并且我有一个名为 的查询Sink_q
,该查询从 中获取数据Source_t
,对其执行一些转换,并将结果加载到 中Sink_t
。
请考虑以下 VBA 代码:
Sub foo()
Dim Current As Worksheet
' Side question: Is there a better way to check for the existence of a worksheet before trying to delete it?
For Each Current In Worksheets
If (Current.Name = "Sink_w") Then
Application.DisplayAlerts = False
Current.Delete
Application.DisplayAlerts = True
Exit For
End If
Next
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sink_w"
ActiveWorkbook.RefreshAll
End Sub
当 VBA 代码删除时Sink_w
(并且这样做时也是如此Sink_t
),Sink_q
变成“仅连接”查询。当 VBA 代码重新创建Sink_w
并执行全部刷新时,Sink_t
不会重新创建(显然,查询的输出不会加载,因为没有可将其加载到的表)。
但Sink_w
确实会重新创建,然后我可以使用 Power Query 图形界面的“加载到...”选项来创建一个表Sink_w
并将数据加载到该表中。(但请注意,创建的表的名称Sink_q
与查询的名称相同,而不是Sink_t
所需的名称。如果我手动将表重命名为Sink_t
,则当我刷新全部内容时,事情仍然按预期工作。)
我的问题
在 VBA 中,我怎样才能:
- 绑定
Sink_q
回Sink_t
这样刷新全部将创建sink_t
(在工作表中sink_w
)并填充该表? - 控制创建的表的名称,这样不是
Sink_t
吗Sink_q
?
1 个回答