我正在寻找一种简单的解决方案,将包含一个已加载的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?
答案 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)
您应该能够将表所在的工作簿“另存为”到新工作簿中。创建新工作簿后,转到数据,单击显示查询,然后删除系统中的查询/表,以便仅保留表。