在关闭事件之前禁止保存对话

时间:2014-01-05 21:54:55

标签: excel vba

我在工作表上有一个命令按钮代码,用于在保存工作表之前检查表中的所有单元格是否都已完成。如果它们都不完整,则会弹出一个带有提醒的用户表单消息框,然后返回到工作表而不保存。我希望能够从'BeforeClose'事件中调用它,但是,即使它仍然执行它应该做的事情,在userform消息框显示并卸载之后它仍然会弹出Save对话框。 / p>

我很难抑制“保存”对话框或自动选择“取消”并返回到工作表进行编辑

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

1 个答案:

答案 0 :(得分:1)

这里有几个不同的问题。

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

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

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

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

由于您的程序在保存(隐藏或取消隐藏行)之前执行了其他工作,因此您可能希望将其移动到单独的Sub中并从任何需要它的事件过程中调用它