【问题标题】:after run macro to save as xlsx file, the macro file convert to xlsx file运行宏保存为xlsx文件后,宏文件转换为xlsx文件
【发布时间】:2023-09-21 20:33:01
【问题描述】:

我希望宏将我的 xlsm 文件备份为 xlsx 格式,保存为 xlsx 类型后仍保留在那里。但是,下面的编码会将现有的 xlsm 文件转换为 xlsx 文件,导致我的宏文件消失。有什么建议可以避免这种情况,我想在 xlsm 文件保留时保存并关闭 xlsx 文件?

Sub backup()
    Application.DisplayAlerts = False
    ThisWorkbook.saveas "C:\Users\Documents\Book1.xlsx", xlOpenXMLWorkbook
    Application.DisplayAlerts = True
End Sub

【问题讨论】:

  • 创建您的 .xlsm 文件的副本,并将其对应为 .xlsx
  • 如何创建副本?一张一张地复印?有任何代码可以复制整个 excel 文件吗?

标签: vba excel xlsx xlsm


【解决方案1】:

使用SaveCopyAs

Sub Test()
Dim wb As Workbook, wb2 As Workbook
Dim Path As String
Application.DisplayAlerts = False
Path = "C:\Users\" & Environ("Username") & "\Desktop\"
Set wb = ThisWorkbook
wb.SaveCopyAs (Path & "File.xlsm")
Set wb2 = Workbooks.Open(Path & "File.xlsm")
wb2.SaveAs Path & "File1.xlsx", xlOpenXMLWorkbook
wb2.Close
Application.DisplayAlerts = True
End Sub

这会将副本保存到您的桌面,但不会影响您正在使用的工作簿。

【讨论】:

  • 它可以在不关闭现有文件的情况下单独保存文件,但是保存的文件无法打开,错误“文件格式或文件扩展名无效”。对于savecopyas,需要插入文件格式吗?
  • 其实你只能将SaveCopyAs的文件保存为与原始文件格式相同的文件。所以你可以创建一个副本,重新打开,然后使用SaveAs 并更改文件格式。
  • 在将工作簿再次保存为Path & "File1.xlsx" 后,您是否不需要Kill Path & "File.xlsm",以便摆脱临时xlsm 文件?
  • 如果我的 xlsm 文件使用我的 Onedrive 共享,其他人在尝试重新打开文件时会遇到错误
  • @UGP 需要确保我与之共享的人有权访问目标文件夹,对吧?
【解决方案2】:

ThisWorkbook 寻址代码所在的工作簿。如果您想保存ActiveWorkbook,您必须将其寻址为ActiveWorkbook 或使用其名称。 将ThisWorkbook 保存为 xlsx 格式后,代码将无法继续运行。要执行您打算执行的操作,您可以将代码放在第三个文件(如加载项)中,然后从那里操作您的工作簿。

【讨论】: