【问题标题】:Exit but still saving even when user selects to cancel退出但即使用户选择取消仍然保存
【发布时间】:2021-08-19 17:14:30
【问题描述】:

我有一件奇怪的事情(我认为),但可能在这里做错了。我试图强制用户在 excel 中输入某些信息。 The msgbox comes up with the OK/Cancel buttons but when either is selected the workbook saves and exits.如果他们取消,那么我希望它位于问题所在的单元格上。任何帮助将不胜感激

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    '---------------------------
    '-- Missing Employee Name --
    '---------------------------
    If Cells(5, 2).Value = Empty Then
        If Not MsgBox("Employee Name missing! Pressing OK will exit without saving.", vbOKCancel, "The Mill") = vbOK Then
            With Sheets("sheet1")
                .Activate
                .Cells(5, 2).Activate
            End With
            Cancel = True
            Exit Sub
        End If
    End If 

End Sub

【问题讨论】:

  • 您的代码不会将“确定”按钮视为True 条件。要考虑它True,您必须从If Not MsgBox(... 中删除Not。然后,您应该消除Exit Sub。让事件解释Cancel 选项。
  • 我删除了“Exit Sub”并让它通过,但它仍然做了同样的事情。如果我不按 OK,那是不是说明它没有被取消,所以 Cancel 默认设置为 False?
  • 对于“确定”按钮,现在它会退出而无需保存...感谢 FaneDuru 的提示。在取消时,我希望 excel 保持打开并定位在需要注意的单元格中。在这种情况下,缺少员工姓名。目前它退出而不保存,而不是移动到“Sheet1”到该单元格位置。
  • 我喜欢相信我从一开始就理解它......这就是我提出这些建议的原因。很高兴我能帮上忙!

标签: excel vba save msgbox


【解决方案1】:

我认为问题在于您没有处理 Workbook_BeforeClose,这会在您尝试关闭工作簿时触发。
因此,虽然保存被取消,但关闭不会。

将所有内容移动到Workbook_BeforeClose 并在那里处理它是可行的,直到用户手动保存。所以你仍然需要在保存前的事件中处理它。

这是一个例子:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Cells(5, 2).Value = Empty Then
    If MsgBox("Employee Name missing! Pressing OK will exit without saving.", vbOKCancel, "The Mill") = vbOK Then
        Application.DisplayAlerts = False
        Application.Quit
    Else
        Sheets("Sheet1").Cells(5, 2).Activate
        Cancel = True
    End If
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Cells(5, 2).Value = Empty Then
    Cancel = True
    MsgBox "Employee Name missing!"
    Sheets("Sheet1").Cells(5, 2).Activate
End If
End Sub

我看到的唯一警告是,Application.DisplayAlerts = False 会影响其他打开的工作簿。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2019-02-08
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多