我想阻止用户使用与打开时相同的名称保存工作簿,并提供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
此代码不起作用。 SaveAs对话框不会出现。
接下来尝试
If ThisWorkbook.Name = "abc" Then ThisWorkbook.ReadOnly = True
'Error - can't assign to read only property.
答案 0 :(得分:5)
如果您只想测试特定文件名 - 请说abc.xlsm
,则下面的代码将停止Save
(但通过SaveAs
),然后设置ReadOnly
属性为False,因此在此会话中不能再在此文件中使用Save
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
答案 1 :(得分:3)
我有两个建议,但为了知道哪个是最好的,你必须告诉我们有关周围代码的更多细节以及如何打开/创建文件等。
使用模板。如果将代码放在模板中并添加新工作簿,则在没有SaveAs对话框的情况下无法保存。
仅在开始时读取工作簿。这可以通过多种方式完成,具体取决于项目的设计(例如Workbooks.Open
带ReadOnly
参数)。
答案 2 :(得分:3)
另一个答案(只读或模板)都是很好的建议
但是,如果你真的想要编码,请试试这个
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
,则需要更改