如何强制另存为SaveAs

我想阻止用户保存与打开的工作簿同名的名称,并提供SaveAs选项。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ThisWorkbook.Name = "abc" Then Cancel = True SaveAsUI = True End If 

也试过

  If ThisWorkbook.Name = "abc" Then SaveAsUI = True 

此代码不起作用。 另存为对话框不出现。

下一次尝试

 If ThisWorkbook.Name = "abc" Then ThisWorkbook.ReadOnly = True 'Error - can't assign to read only property. 

如果你只想testing一个特定的文件名 – 比如说abc.xlsm那么下面的代码将停止Save (但是传递SaveAs ),然后将ReadOnly属性设置为False,这样Save在这个会话中abc.xlsm被使用

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Not SaveAsUI Then If ThisWorkbook.Name = "abc.xlsm" Then Cancel = True ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly End If End If End Sub 

我有两个build议,但为了知道哪个是最好的,你必须告诉我们关于周围代码的更多细节,以及如何打开/创build文件等。

  1. 使用模板。 如果将代码放在模板中并添加新的工作簿,则无法在没有SaveAs对话框的情况下保存该工作簿。

  2. 使工作簿只能在打开时阅读。 这可以用很多方法完成,具体取决于项目的devise(例如, Workbooks.Open with ReadOnly参数)。

另一个答案(只读或模板)都是很好的build议

但是,如果你真的想编码,试试这个

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim fName As String If ThisWorkbook.Name "abc.xlsm" Then If Not SaveAsUI Then fName = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm") If fName = "False" Then MsgBox "File NOT saved", vbOKOnly Cancel = True Else Application.EnableEvents = False ThisWorkbook.SaveAs Filename:=fName, FileFormat:=xlOpenXMLWorkbookMacroEnabled Application.EnableEvents = True End If End If End If End Sub 

注意:为Excel 2007/2010编码( If ThisWorkbook.Name "abc.xlsm" Then

如果使用Excel 2003,您可能需要更改