如何在新工作簿中将Power Query表另存为常规表(无连接)?

时间:2019-07-04 10:09:23

标签: excel vba office365 powerquery

我正在寻找一种简单的解决方案,将包含一个已加载的Power Query表的单个工作表导出到新工作簿中,没有基础连接和查询。

我认为Microsoft在Excel 2019中对Power Query表(ListObject)的行为及其在副本之间保存连接的方式进行了更改。以前(Excel 2016),当您创建表或包含表的工作表的副本时,仅保留值和格式,现在Excel还复制了刷新该表所需的所有查询和连接。我不想要-我不想向向其发送数据的任何人公开Power Query代码。

以前,我可以使用以下简单代码:

Dim SourceWb As Workbook
Dim SourceSh As Worksheet
Dim TargetWb As Workbook
Dim TargetSh As Worksheet

Set SourceWb = ActiveWorkbook
Set SourceSh = SourceWb.ActiveSheet

SourceSh.Copy

Set TargetWb = ActiveWorkbook
Set TargetSh = TargetWb.ActiveSheet

Application.DisplayAlerts = False
TargetWb.SaveAs SourceWb.Path & "\" & "Copy.xlsx"
TargetWb.Close
Application.DisplayAlerts = True

现在我需要采取一些额外的步骤:

Dim SourceWb As Workbook
Dim SourceSh As Worksheet
Dim TargetWb As Workbook
Dim TargetSh As Worksheet
Dim TableCn As WorkbookConnection
Dim TableQr As WorkbookQuery

Set SourceWb = ActiveWorkbook
Set SourceSh = SourceWb.ActiveSheet

SourceSh.Copy

Set TargetWb = ActiveWorkbook
Set TargetSh = TargetWb.ActiveSheet

On Error Resume Next
For Each TableCn In TargetWb.Connections
    TableCn.Delete
Next
For Each TableQr In TargetWb.Queries
    TableQr.Delete
Next

Application.DisplayAlerts = False
TargetWb.SaveAs SourceWb.Path & "\" & "Copy.xlsx"
TargetWb.Close
Application.DisplayAlerts = True

我知道不是很多代码,但是我觉得我可能会遗漏一些东西,也许解决方案会更简单一些。是否有人知道Microsoft所做的导致此行为的确切更改?在VBA模型中是否进行了任何更改,这些更改将有助于在不保留基础查询的情况下复制/粘贴Power Query Tables?

2 个答案:

答案 0 :(得分:0)

我建议您复制表格并将其粘贴到新的表格中,然后再保存新的表格,而不是复制整个表格并保存。

首先将表粘贴为值,然后再单独粘贴格式。 下面是代码:

Public Sub Save_Query_Table()
        Range("Query_Table_Name[#All]").Select
        Selection.Copy
        Workbooks.Add
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

        Application.CutCopyMode = False

        ActiveWorkbook.SaveAs Filename:=FullFileName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

End Sub

请编辑上面的查询表名称和SaveAs方法以分别包括表名称和文件名。
我已经对此进行了测试,并且可以正常工作。

答案 1 :(得分:-2)

您应该能够将表所在的工作簿“另存为”到新工作簿中。创建新工作簿后,转到数据,单击显示查询,然后删除系统中的查询/表,以便仅保留表。