Excel 如何将电源查询表保存为新工作簿中的常规表(无连接)?

Excel 如何将电源查询表保存为新工作簿中的常规表(无连接)?,excel,vba,office365,powerquery,Excel,Vba,Office365,Powerquery,我正在寻找一个简单的解决方案,将包含一个加载的Power查询表的单个工作表导出到一个新工作簿,而不导出底层连接和查询 我认为微软在Excel 2019中改变了一些关于Power查询表(ListObject)的行为以及它们在副本之间保存连接的方式。以前(Excel 2016)创建表或包含表的工作表副本时,仅保留值和格式,现在Excel还复制刷新该表所需的所有查询和连接。我不想这样-我不想向我发送数据的任何人公开电源查询代码 在此之前,我可以使用以下简单代码: Dim SourceWb作为工作簿 将

我正在寻找一个简单的解决方案,将包含一个加载的Power查询表的单个工作表导出到一个新工作簿,而不导出底层连接和查询

我认为微软在Excel 2019中改变了一些关于Power查询表(ListObject)的行为以及它们在副本之间保存连接的方式。以前(Excel 2016)创建表或包含表的工作表副本时,仅保留值和格式,现在Excel还复制刷新该表所需的所有查询和连接。我不想这样-我不想向我发送数据的任何人公开电源查询代码

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

Dim SourceWb作为工作簿
将SourceSh设置为工作表
将TargetWb设置为工作簿
将目标设置为工作表
设置SourceWb=ActiveWorkbook
设置SourceSh=SourceWb.ActiveSheet
收到
设置targetWeb=ActiveWorkbook
设置TargetSh=TargetWb.ActiveSheet
Application.DisplayAlerts=False
TargetWb.SaveAs SourceWb.Path&“\”和“Copy.xlsx”
目标B,关闭
Application.DisplayAlerts=True
现在我需要采取一些额外的步骤:

Dim SourceWb作为工作簿
将SourceSh设置为工作表
将TargetWb设置为工作簿
将目标设置为工作表
Dim TableCn作为工作簿连接
Dim TableQr作为工作簿查询
设置SourceWb=ActiveWorkbook
设置SourceSh=SourceWb.ActiveSheet
收到
设置targetWeb=ActiveWorkbook
设置TargetSh=TargetWb.ActiveSheet
出错时继续下一步
对于targetWeb.Connections中的每个表CN
表CN.删除
下一个
对于targetWeb.查询中的每个TableQr
表qr.删除
下一个
Application.DisplayAlerts=False
TargetWb.SaveAs SourceWb.Path&“\”和“Copy.xlsx”
目标B,关闭
Application.DisplayAlerts=True

我知道没有太多的代码,但我觉得我可能遗漏了一些东西,也许解决方案可以简单一点。有人知道微软做出的导致这种行为的确切改变吗?VBA模型中是否有任何更改有助于在不保留基础查询的情况下复制/粘贴Power Query表格?

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

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

我建议复制表格并粘贴到新表格中,然后保存新表格,而不是复制整个表格并保存它

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

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方法,分别包含您的表名和文件名

我已经对此进行了测试,它正在工作。

我建议复制表格并粘贴到新表格中,然后保存新表格,而不是复制整个表格并保存它

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

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方法,分别包含您的表名和文件名

我已经对此进行了测试,它正在工作。

为什么不将粘贴复制为值?我不仅会丢失单元格格式(背景色、字体等),还会丢失数字格式。假设我在一列中有EAN代码。其中一些以“0”开头,当我仅复制/粘贴值时,这些文本值将被转换为数字,这不是我想要的。我尝试了两个步骤:1)粘贴值(xlPasteValues),2)粘贴格式(xlPasteFormats),但第二步也会复制连接和查询。为什么不将粘贴复制为值?我不仅会丢失单元格格式(背景色、字体等),还会丢失数字格式。假设我在一列中有EAN代码。其中一些以“0”开头,当我仅复制/粘贴值时,这些文本值将被转换为数字,这不是我想要的。我尝试了两步过程:1)粘贴值(xlPasteValues),2)粘贴格式(xlPasteFormats),但第二步也会复制连接和查询。