如何在打开的工作簿中禁用SaveAs,但不禁用Save

时间:2019-03-29 02:53:25

标签: excel vba save save-as before-save

我无法找到任何仅在不禁用保存的情况下禁用SaveAs功能的代码。

列出的代码在禁用SAVE和SAVE AS方面非常有效,但是我希望用户能够保存数据,但没有机会使用SAVEAS,因此他们不能创建工作簿的版本。 (在这种情况下,在文件管理器中复制文件不是问题-仅保存为问题。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xName As String
xName = "CancelBeforeSave"

If Not Evaluate("=ISREF('" & xName & "'!A1)") Then
    Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = xName & ""
    Sheets(xName & "").Move after:=Worksheets(Worksheets.Count)
    'To edit macros disable by changing to True
    'Need to open workbook first with macros disabled
    Sheets(xName & "").Visible = False
    Exit Sub
End If
    'To edit macros disable by changing to False
    'Need to open workbook first with macros disabled
    Cancel = True
End Sub

我希望打开后的工作簿在不影响其他打开的工作簿的情况下不允许另存为。

从我提供的代码中可以重新启用保存功能,这也是可以接受的。

1 个答案:

答案 0 :(得分:1)

只需测试Option Explicit Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI Then MsgBox "Save As is disabled", vbInformation Cancel = True End If End Sub 是否为真并取消保存。

SaveAsUI

Workbook.BeforeSave event的文档中,您可以找到:

  

True
  MarkdownField如果由于所做的更改而需要显示另存为对话框,则需要将其保存在工作簿中。

请注意,这不是安全功能。
这样可以防止用户使用对话框“另存为”。但是,通过任何其他Excel工作表中的某些VBA代码,您都可以轻松地做到这一点。您尝试禁止实际的另存为的任何操作都可以解决。 不是这将是一项安全功能。只是为了防止另存为 “意外” 。任何真的想做一个另存为并且知道如何欺骗它的人仍然可以做到这一点。