【问题标题】:Excel Macro generated file copy keeps links to original filesExcel 宏生成的文件副本保留指向原始文件的链接
【发布时间】:2012-07-09 13:43:39
【问题描述】:

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

这就是宏的作用:

  1. 用全局数据打开源文件;
  2. 过滤数据;
  3. 将其复制并粘贴到包含宏的工作簿中;
  4. 重新计算并刷新工作簿,并且;
  5. 将文件的副本保存到另一个文件夹。

宏似乎运行良好并且文件正在保存,但是我在第 4 步和第 5 步遇到了 2 个问题:

  • 数据透视表似乎没有刷新 - 这可能是因为第二个问题:
  • 已保存副本中的所有数据透视表仍引用原始文件

我更愿意通过生成没有链接的复制文件来解决这两个问题,但我也愿意接受任何可能允许我强制复制的文件链接到自身的创可贴(这在以下情况下似乎不起作用我手动完成)。

如果您想查看全部代码,我有完整的代码,但是因为我怀疑问题在于我如何保存文件,所以我将把这段代码粘贴到这里。如果您需要查看宏的另一部分,请告诉我。任何帮助将不胜感激,在此先感谢。

保存功能:

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)

【问题讨论】:

  • +1 好问题。正常的解决方案是将创建回源工作簿的链接替换为活动工作簿(即新创建的文件)。
  • 谢谢布雷特 - 我有同样的想法并尝试过,有很多例子可以看,但由于某种原因无法让它工作。无论我尝试了多少种不同的方法,我一直在源数据分配上遇到错误。起作用的不是复制文件并以不同的名称保存。这并不理想,因为文件仍然有宏和一堆不必要的数据。希望非常了解保存功能的人可以提供一些更好的方法。

标签: excel vba save pivot-table


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2018-07-26
    • 1970-01-01
    • 2017-04-07
    • 2020-02-16
    • 2021-04-19
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多