【问题标题】:How to disable the save as prompt?如何禁用另存为提示?
【发布时间】:2014-12-03 03:15:36
【问题描述】:

        If IsWorkbookOpen("CONTRACT\CONTRACTLIST_Cement.xlsx") Then
            x = 0
        Else
            Application.DisplayAlerts = False
            ActiveWorkbook.Close savechanges:=True
            Application.DisplayAlerts = True
        End If

您好,虽然使用了上面的代码,但还是偶尔会出现另存为提示,影响程序。有谁知道如何完全阻止它?问题是,当我点击另存为后,它会提醒我它仍然处于打开状态。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    试试下面的代码

    明确地参考工作簿而不是ActiveWorkbook总是好的

    Sub test()
       If IsWorkbookOpen("CONTRACT\CONTRACTLIST_Cement.xlsx") Then
                x = 0
        Else
            Application.DisplayAlerts = False
            ThisWorkbook.Save
            ThisWorkbook.Close False
            Application.DisplayAlerts = True
        End If
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      您可以使用ThisWorkbook 对象中的Workbook_BeforeSave 事件来捕获选择另存为(或使用键盘快捷键)的用户,这将导致显示另存为提示并将SaveAsUI 设置为true。如果SaveAsUI 为真,这意味着用户正在尝试将文件另存为其他内容,因此您可以取消另存为操作。

      打开 Visual Basic 窗口 (Alt + F11) 并将以下代码放入 ThisWorkbook

      禁用另存为

      Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      
          If (SaveAsUI = True) Then
              MsgBox "Sorry. I can't have you saving this file as something else."
              Cancel = True
          End If
      End Sub
      

      您可以根据需要删除MsgBox 行;如果您想通知用户该功能已禁用,我将其作为示例

      要禁用同时保存和另存为功能,您将删除if 语句并取消保存操作,无论是否显示另存为提示。

      禁用保存和另存为

      Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      
          MsgBox "Sorry. I can't have you saving this file at all."
          Cancel = True
      End Sub
      

      如果您只想禁用保存操作,您只需要查找用户正在保存的位置,但 SaveAsUI 正在显示(即用户只是保存文件)。

      禁用保存

      Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      
          If (SaveAsUI = False) Then
              MsgBox "Sorry. I can't have you saving any updates to this file."
              Cancel = True
          End If
      End Sub
      

      最后,请注意,如果用户只是关闭文件,用户仍会收到保存提示。用户将无法保存并且文件将关闭,但如果您希望体验更简洁,则需要进行额外的更改。当用户关闭文件时,Excel 会检查 ThisWorkbook.Saved 变量以查看文件是否已保存。如果为 false,则会提示用户保存文件。为了防止这种情况,我们可以将此布尔值设置为 true 而不保存,从而“欺骗”Excel 以为文件已保存

      禁用保存和另存为,包括在用户尝试关闭文件之后

      在您的Workbook_BeforeSave 代码之后添加以下代码。

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
          ActiveWorkbook.Saved = True
          MsgBox "Click OK to continue closing this file. Changes will not be saved."
      End Sub
      

      【讨论】:

      • Jaycal,用户仍然可以通过按 Ctrl+S 来执行保存,也许你可以这样说(在 If SaveAsUI 之外): If (Cancel = false) Then Cancel = true
      • 感谢您的敏锐目光。 OP 实际上只是要求禁用另存为功能,所以这就是我提供的代码。为了使答案更完整,它现在展示了如何禁用“仅保存”、“仅另存为”或“保存”和“另存为”。
      猜你喜欢
      • 2017-06-30
      • 2023-03-19
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2011-01-15
      • 2015-11-10
      • 2020-05-21
      相关资源
      最近更新 更多