在使用Excel VBA 进行“另存为”操作时,如果原始工作簿被关闭,可能会造成一些问题。(大家可以亲测下,我有一个带有宏的工作簿,另存为不带宏的工作簿后,原始工作簿自动关闭,另存后的工作簿显示激活状态)
要避免这种情况发生,可以考虑以下几种方法:
方法一:保存副本而不关闭原始工作簿
你可以在 VBA 代码中使用 SaveCopyAs 方法,这样可以保存当前工作簿的副本而不会关闭原始工作簿。示例代码如下:
Sub SaveCopyAs()
Dim filePath As String
filePath = "C:\Shared\Database.xlsx"
ThisWorkbook.SaveCopyAs filePath
End Sub
这行代码将当前工作簿保存为 Database.xlsx 文件到指定的路径 C:\Shared\,而不会关闭原始工作簿。
方法二:使用“另存为”并保留原始工作簿
如果你仍然希望使用 SaveAs 方法,可以在保存之前,使用 Application.DisplayAlerts = False 来关闭可能出现的提示,并确保工作簿在保存后不会被关闭。以下是示例代码:
Sub SaveAsWorkbook()
Dim filePath As String
filePath = "C:\Shared\Database.xlsx"
Application.DisplayAlerts = False
ThisWorkbook.SaveAs fileName:=filePath, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
End Sub
请注意,虽然这个方法避免了关闭原始工作簿的问题,但在保存时仍然会弹出一些提示。
方法三:使用 Workbook 对象
另一个方法是创建一个新的 Workbook 对象,然后将当前工作簿的内容复制到新的工作簿中,再将新的工作簿保存为所需的格式:
Sub SaveAsNewWorkbook()
Dim newWorkbook As Workbook
Dim filePath As String
filePath = "C:\Shared\Database.xlsx"
' 创建一个新的工作簿
Set newWorkbook = Workbooks.Add
' 复制当前工作簿的内容到新工作簿
ThisWorkbook.Sheets.Copy Before:=newWorkbook.Sheets(1)
' 保存新的工作簿
newWorkbook.SaveAs fileName:=filePath, FileFormat:=xlOpenXMLWorkbook
' 关闭新的工作簿而不保存
newWorkbook.Close SaveChanges:=False
End Sub
这样可以确保原始工作簿保持不变,而新创建的工作簿将被保存为指定的格式。
以上几种方法都可以帮助你避免在“另存为”过程中关闭原始工作簿。你可以根据自己的需求选择最适合的方法。
原创 武旭鹏 米宏Office 2024年08月08日 07:00 上海