如何在不关闭当前文件的情况下保存无宏副本?

时间:2018-04-04 06:58:22

标签: excel vba excel-vba

我正在尝试使用ThisWorkbookxlsx中保存SaveCopyAs的副本。问题是SaveCopyAs将文件保存为启用宏的文件,xlsb在我的情况下是不需要的,而SaveAs执行我需要的操作,它也会关闭ThisWorkbook

是否有更简单的方法以不支持宏的格式保存并且不进行解决方法?

目前我找到的最佳解决方案是下面的代码片段,但它有点挑剔,它不会保存项目中我需要的ContentTypeProperties,所以需要再次添加

感谢任何想法,谢谢!

Dim sPath as String

sPath = ThisWorkbook.FullName
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sFileName & ".xlsx", 51
Application.Workbooks.Open (sPath)
Application.DisplayAlerts = True
Exit Sub

1 个答案:

答案 0 :(得分:1)

  1. 定义您的路径sPath = ThisWorkbook.Path & "\" & sFileName,不带扩展名
  2. 使用ThisWorkbook.SaveCopyAs sPath & ".xlsm"保存副本。
  3. 使用Set Wb = Application.Workbooks.Open(sPath & ".xlsm")
  4. 打开该副本
  5. 不使用Wb.SaveAs sPath & ".xlsx", xlOpenXMLWorkbook
  6. 再次保存
  7. 关闭工作簿Wb.Close SaveChanges:=False
  8. 因此,以下内容应该可以正常工作,并保持当前代码运行,而不会重新打开当前工作簿的副作用。

    Dim sPath As String
    sPath = ThisWorkbook.Path & "\" & sFileName 'no extension!
    
    ThisWorkbook.SaveCopyAs sPath & ".xlsm"
    Dim Wb As Workbook
    Set Wb = Application.Workbooks.Open(sPath & ".xlsm")
    Wb.SaveAs sPath & ".xlsx", xlOpenXMLWorkbook
    Wb.Close SaveChanges:=False
    

    可能您要删除xlsm文件副本

    Kill sPath & ".xlsm"
    

    您可能希望使用Application.DisplayAlerts = FalseApplication.ScreenUpdating = False