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

时间:2012-07-10 05:43:31

标签: excel vba save pivot-table

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

这就是宏的作用:

  1. 使用全局数据打开源文件;
  2. 过滤数据;
  3. 将其复制并粘贴到包含宏的工作簿中;
  4. 重新计算并刷新工作簿;
  5. 将文件的副本保存到另一个文件夹。
  6. 宏似乎运行正常并且文件正在保存,但是我在第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 个答案:

答案 0 :(得分: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

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