【发布时间】:2018-08-31 19:32:09
【问题描述】:
我正在编写代码 (Excel 2016),以防止用户将文件保存到除一个特定位置之外的任何目录。我正在使用 BeforeSave 事件如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim NamePath As String
On Error GoTo Final
' If Saving Then Exit Sub
If SaveAsUI = True Then
Cancel = True
Application.EnableEvents = False
NamePath = Application.GetSaveAsFilename(InitialFileName:=ActiveWorkbook.Name, FileFilter:="Excel Files (*.xlsm), *.xlsm")
If NamePath = "False" Then Exit Sub
If InStr(1, NamePath, "H:\SSV\WORK\Workcenter Safety Modification Tracking Files", vbTextCompare) = 0 Then
MsgBox "You cannot save to another directory."
GoTo Final
Else
Me.SaveAs NamePath
GoTo Final
End If
End If
Final:
Application.EnableEvents = True
End Sub
当我从功能区栏中选择“文件”,然后选择“另存为”时,我会在此处结束:
当我单击“保存”按钮时,我的代码假定我尚未输入新文件名,因此它会提示输入“另存为”名称和位置。只要用户不使用文件|另存为,它就可以工作。使用快速启动或自定义功能区中的另存为按钮有效。
我的问题是,在您输入新文件名和/或选择新位置并单击“文件|另存为”屏幕上的“保存”按钮之前,使用“文件|另存为”不会触发 BeforeSave 事件。在文件|另存为屏幕中,我已经可以选择其中一个或两个,但是 BeforeSave 事件对此一无所知,它就像我单击了快速启动按钮并且尚未输入新名称一样触发或选择了一个新位置。用户输入新的文件名/位置,点击保存并再次提示输入新的文件名/位置。
我正在寻找两种解决方案之一:
- 另一种限制用户保存文件位置的方法。
- 一种将文件名/位置从上述文件|另存为屏幕传递到 BeforeSave 事件的方法。
【问题讨论】: