Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel宏生成的文件副本保留指向原始文件的链接_Excel_Vba_Save_Pivot Table - Fatal编程技术网

Excel宏生成的文件副本保留指向原始文件的链接

Excel宏生成的文件副本保留指向原始文件的链接,excel,vba,save,pivot-table,Excel,Vba,Save,Pivot Table,我有非常大的文件中的销售全球销售数据,我需要按国家和产品进行筛选,然后进行分析。由于我需要对不同的国家/地区/产品组合反复执行相同的分析,因此我尝试使用宏来执行此操作 这就是宏的作用: 打开包含全局数据的源文件; 过滤数据; 复制并粘贴到包含宏的工作簿中; 重新计算和刷新工作簿和文档; 将文件的副本保存到另一个文件夹。 宏似乎运行正常,文件正在保存,但在步骤4和5中我遇到了两个问题: 数据透视表似乎没有刷新-这可能是因为第二个问题: 保存副本中的所有透视表仍引用原始文件 我更愿意通过生成没有链接

我有非常大的文件中的销售全球销售数据,我需要按国家和产品进行筛选,然后进行分析。由于我需要对不同的国家/地区/产品组合反复执行相同的分析,因此我尝试使用宏来执行此操作

这就是宏的作用:

打开包含全局数据的源文件; 过滤数据; 复制并粘贴到包含宏的工作簿中; 重新计算和刷新工作簿和文档; 将文件的副本保存到另一个文件夹。 宏似乎运行正常,文件正在保存,但在步骤4和5中我遇到了两个问题:

数据透视表似乎没有刷新-这可能是因为第二个问题: 保存副本中的所有透视表仍引用原始文件 我更愿意通过生成没有链接的复制文件来解决这两个问题,但我也愿意接受任何可能允许我强制复制文件链接到自身的绷带。当我手动执行时,这似乎不起作用

我有完整的代码,如果你想看到它的全部,但因为我怀疑问题是我如何保存文件,我将只是粘贴在这里。如果需要查看宏的其他部分,请告诉我。任何帮助都将不胜感激,提前谢谢

保存功能:

Public Sub SaveAsCopy(filePath As String)
   Dim updateStatus As Boolean

   'Check current status of Alerts
   updateStatus = Application.DisplayAlerts
   'Turn off alerts
   Application.DisplayAlerts = False

   ThisWorkbook.Sheets.Copy 'creates new workbook without macros"
   'The New workbook copy is now the Active workbook
   'Delete Control Sheet
   ActiveWorkbook.Sheets(1).Delete

   'Save Macro free version and close
   ActiveWorkbook.SaveAs Filename:=filePath, FileFormat:=51
   ActiveWorkbook.Close

   'Revert back to origional alert status
   Application.DisplayAlerts = updateStatus

End Sub
函数调用:

Call SaveAsCopy(filePath)

将与您分享我开发的解决方案,因为我没有接触到更优雅的解决方案:

Public Sub SaveAsCopy(filePath As String)
   Dim updateStatus As Boolean

   'Check current status of Alerts
   updateStatus = Application.DisplayAlerts
   'Turn off alerts
   Application.DisplayAlerts = False

   'Hide Control Sheet
   ActiveWorkbook.Sheets(1).Visible = False

   'Save Macro free version and close
   ActiveWorkbook.SaveAs Filename:=filePath, FileFormat:=52

   'Unhide
   ActiveWorkbook.Sheets(1).Visible = True

   'Revert back to original alert status
   Application.DisplayAlerts = updateStatus

End Sub

在父函数结束时,我关闭当前文件,重新打开原始文件,并在新工作簿中循环以删除宏。

将分享我开发的解决方案,因为我没有得到任何更优雅的解决方案:

Public Sub SaveAsCopy(filePath As String)
   Dim updateStatus As Boolean

   'Check current status of Alerts
   updateStatus = Application.DisplayAlerts
   'Turn off alerts
   Application.DisplayAlerts = False

   'Hide Control Sheet
   ActiveWorkbook.Sheets(1).Visible = False

   'Save Macro free version and close
   ActiveWorkbook.SaveAs Filename:=filePath, FileFormat:=52

   'Unhide
   ActiveWorkbook.Sheets(1).Visible = True

   'Revert back to original alert status
   Application.DisplayAlerts = updateStatus

End Sub

在父函数结束时,我关闭当前文件,重新打开原始文件,并循环新工作簿以删除宏。

+1问得好。通常的解决方案是用activeworkbook(即新创建的文件)替换创建回源工作簿的链接。感谢Brett-我也有同样的想法并尝试过,有很多例子要看,但由于某种原因无法使其工作。不管我用了多少种不同的方法,我在源数据分配上总是出错。有效的方法是不复制文件并以其他名称保存。但这并不理想,因为文件中仍然有宏和一堆不必要的数据。希望对save函数非常熟悉的人能够为更好的方法提供一些帮助。+1个好问题。通常的解决方案是用activeworkbook(即新创建的文件)替换创建回源工作簿的链接。感谢Brett-我也有同样的想法并尝试过,有很多例子要看,但由于某种原因无法使其工作。不管我用了多少种不同的方法,我在源数据分配上总是出错。有效的方法是不复制文件并以其他名称保存。但这并不理想,因为文件中仍然有宏和一堆不必要的数据。希望对save函数非常熟悉的人能够为更好的方法提供一些帮助。