【发布时间】:2016-07-16 04:48:02
【问题描述】:
我希望在 VBA 脚本开始修改内容之前提示用户保存工作簿。当 SaveAs 对话框出现时,如果用户单击 Cancel 我会引发自定义错误并停止脚本。如果他们点击保存并且文件名已经存在,我希望他们被询问是否覆盖。
这是我的代码:
Function SaveCurrentWorkbook(wkbSource As Workbook, strNewFileName As String) As Variant
If Not bolDebug Then On Error GoTo errHandler
Dim varSaveName As Variant
SaveAsDialog:
varSaveName = Application.GetSaveAsFilename(InitialFileName:=strNewFileName, FileFilter:="Excel Files (*.xls), *.xls")
If varSaveName <> False Then
wkbSource.SaveAs Filename:=varSaveName, ConflictResolution:=True, Addtomru:=True
Set SaveCurrentWorkbook = wkbSource
Else
SaveCurrentWorkbook = False
Err.Raise 11111, , "Save Canceled"
End If
exitProc:
Exit Function
errHandler:
Select Case Err.Number
Case 1004 'Clicked "No" or "Cancel" - can't differentiate
Resume SaveAsDialog
Case esle
MsgBox "File not saved. Stopping script.", vbOKOnly, Err.Description
Resume exitProc
End select
End Function
如果他们点击“是”,它会覆盖它。如果他们单击“否”,我希望出现“另存为”对话框,以便他们可以选择新的文件名,但我得到了一个错误。如果他们单击“取消”,我希望发生错误并停止脚本。问题是我无法区分“否”和“取消”之间触发的错误。
任何建议如何处理? (请原谅错误处理的不当使用 - 已经有一段时间了。)
附:此函数由另一个过程调用,因此如果用户在 SaveAs 对话框或 ResolveConflict 对话框中单击“取消”,我希望调用过程也停止。我想我可以通过检查 SaveCurrentWorkbook 返回的内容(工作簿对象或 False)来做到这一点。
【问题讨论】:
标签: vba excel excel-2013