【发布时间】:2016-06-09 13:38:29
【问题描述】:
每当我保存 excel 文件时,我都必须这样做:
将文件保存在一个驱动器位置(如果存在同名文件,则覆盖)
返回文件的原始位置并保存(覆盖文件)
代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Dim thisPath As String
Dim oneDrivePath As String
thisPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
oneDrivePath = "C:\Users\Folder\OneDrive\" & ThisWorkbook.Name
ActiveWorkbook.SaveAs _
Filename:=oneDrivePath
Do
Loop Until ThisWorkbook.Saved
ActiveWorkbook.SaveAs _
Filename:=thisPath
Do
Loop Until ThisWorkbook.Saved
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
但这不起作用,它卡在无限循环中或 Excel 进入无响应状态。知道如何完成这项任务吗?
我能想到它失败的原因可能是每次保存文件时都会触发它,但 Application.EnableEvents = False 不应该阻止它发生吗? '
编辑#1:
在代码通过End Sub 行后,我尝试单步执行进入Not Responding State 的代码
【问题讨论】:
-
如果你按 F8 单步执行,它会粘在哪一行?
-
@Rodger 在代码通过
End Sub行后,我尝试单步执行进入Not Responding State的代码 -
文件是否按预期保存在两个位置?当您进入
End Sub行时,它们应该出现在各自的位置 -
在我看来可能是因为您使用
BeforeSave实际执行 2 次保存,所以您可能对 Excel 感到有些困惑,因为它不确定一旦完成操作应该执行什么保存在保存之前。尝试在 End Sub 之前设置Cancel = True以取消保存尝试,看看是否有帮助