2

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

这就是宏的作用:

  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)
4

1 回答 1

0

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

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

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

于 2012-07-12T23:52:31.243 回答