在closures事件之前禁止保存对话

我有一个表单上的命令button代码,检查表中的所有单元格是否已完成保存工作表之前。 如果它们不是全部完成,用户窗体消息框随着提示popup,然后返回到表单而不保存。 我希望能够从“BeforeClose”事件中调用它,但是,即使它仍然按照它应该做的那样,在用户窗体消息框显示并被卸载之后,它仍然popup“保存”对话框。

我正在努力抑制保存对话框或自动select“取消”并返回到工作表进行编辑

Option Explicit Dim WSh As Worksheet Dim Create As Boolean Dim Pipe As Worksheet Dim LR As Long, i As Long Dim c As Variant Dim d As Variant Dim u As Variant Dim target As Variant Private Sub CommandButton1_Click() Application.ScreenUpdating = False Set Pipe = Sheets("Pipe Cleaning") Select Case Pipe.Range("N1") Case Is = False For Each d In Range("L18:L113") If d.Value >= 1 And d.Value <= 4 Then Mbox.Show Exit Sub End If Next d Case Is = True For Each u In Range("L18:L113") If u.Value >= 1 And u.Value <= 3 Then Mbox.Show Exit Sub End If Next u End Select Pipe.Activate Pipe.Unprotect Range("A8:A15").EntireRow.Hidden = False For Each c In Range("A8:A15") Select Case c.Value Case Is = "" c.EntireRow.Hidden = True End Select Next c Pipe.Protect ActiveWorkbook.Save Application.ScreenUpdating = True End Sub 

这里有几个不同的问题。

您需要重新定位代码,以检查工作表是否有效保存到自己的函数中(从Set pipe = down到End Select以及任何相关的variables声明)。 如果我们可以保存,那么该函数返回True ; 如果我们不好,然后返回False

一旦完成, Click事件过程可以调用该函数并检查返回值以决定是否保存工作簿

同样, BeforeClose事件过程可以使用函数来决定我们是否可以保存。 如果该函数返回False那么您可以将BeforeClose过程的Cancel参数设置为True ,以防止工作簿closures

您可能需要考虑BeforeSave事件过程是否也需要执行此检查

当你的程序在保存(隐藏或取消隐藏行)之前做了其他的工作,那么你可能想把它移到一个单独的Sub中,并从任何需要它的事件过程中调用它