我希望在VBA腳本開始修改內容之前提示用戶保存工作簿。當SaveAs對話框出現時,如果用戶單擊取消,則引發自定義錯誤並停止腳本。如果他們點擊保存並且文件名已經存在,我希望他們被問到是否覆蓋。如何處理Workbook.Save上的「否」或「取消」覆蓋確認?
這裏是我的代碼:
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對話框出現,以便他們可以選擇一個新的文件名,但相反,我得到一個錯誤。如果他們點擊「取消」,我想要發生錯誤並停止腳本。問題是我無法區分「否」和「取消」之間觸發的錯誤。
任何建議如何處理? (請原諒任何窮人使用的錯誤處理 - 它已經有一段時間。)
附:此功能由另一個過程調用,因此如果用戶在SaveAs對話框或ResolveConflict對話框中單擊「取消」,我希望調用過程也停止。我想我可以通過檢查SaveCurrentWorkbook返回的內容(Workbook對象或False)來做到這一點。
這是偉大的,謝謝! – MJA