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

Posted

技术标签:

【中文标题】如何在打开的工作簿中禁用 SaveAs 但不禁用 Save【英文标题】:How to disable SaveAs in an open workbook but NOT disable Save 【发布时间】:2019-03-29 02:53:25 【问题描述】:

我找不到任何只禁用 SaveAs 功能而不禁用 Save 的代码。

列出的代码在禁用 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】:

只需测试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 的文档中,您可以找到:

SaveAsUITrue如果由于所做的更改需要保存在工作簿中而将显示另存为对话框。 p>

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

【讨论】:

因此,如果通过技巧触发了另存为,我的 VBA 代码是否可以识别已触发另存为并例如隐藏新的另存为文件中的所有关键工作表?? @SimonJacobs 不,诀窍是禁用 VBA,然后使用 SaveAs。这样你的 VBA 就不能触发任何东西,因为它被禁用了。如果用户可以打开和读取文件,则不能阻止用户将数据复制或保存到另一个文件。

以上是关于如何在打开的工作簿中禁用 SaveAs 但不禁用 Save的主要内容,如果未能解决你的问题,请参考以下文章

Excel2016 文件运行宏,出现可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用

无法运行宏 Listbox4_Change。宏可能在此工作簿中不可用或所有宏都已禁用

检查无线电时删除类

如何使单选按钮只读但不禁用?

打开 Blender 时禁用开始屏幕

如何在jQGrid行中禁用超链接