有什么可以帮助到您的?

Excel中“另存为”时,原始工作簿被关闭?

在使用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 上海

评论区(暂无评论)

我要评论

昵称
邮箱
网址
0/200
没有评论
更多文档