如何在打开的工作簿中禁用SaveAs但不禁用“保存”

问题描述 投票:0回答:1

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

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

我希望工作簿在打开时不允许saveas而不影响其他打开的工作簿。

或者,如果我们可以重新启用保存功能,那么您提供的代码也是可以接受的。

excel vba save save-as before-save
1个回答
1
投票

只测试SaveAsUI是否为真并取消保存。

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

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

SaveAsUI True如果由于需要保存在工作簿中的更改而显示“另存为”对话框。

请注意,这不是安全功能。 这可以防止用户使用“另存为”对话框。但是在任何其他Excel工作表中使用一些VBA代码,您可以轻松地欺骗它。你可以做任何试图禁止真正保存的东西都可以解决。这不是安全功能。这只是为了防止“意外”保存。任何真正想要保存并且知道如何欺骗它的人仍然可以做到。

© www.soinside.com 2019 - 2024. All rights reserved.