我在工作表上有一个命令按钮代码,用于在保存工作表之前检查表中的所有单元格是否都已完成。如果它们都不完整,则会弹出一个带有提醒的用户表单消息框,然后返回到工作表而不保存。我希望能够从'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
答案 0 :(得分:1)
这里有几个不同的问题。
您需要重新定位代码以检查工作表是否有效保存到自己的函数中(从Set pipe =
到End Select
以及任何相关变量声明的所有内容)。如果我们可以保存,那么让该函数返回True
;如果我们不行,那么请返回False
完成后,Click
事件过程可以调用该函数并检查返回值以决定是否保存工作簿
类似地,BeforeClose
事件过程可以使用该函数来决定是否可以保存。如果函数返回False
,那么您可以将Cancel
过程的BeforeClose
参数设置为True
,以防止工作簿关闭
您可能需要考虑BeforeSave
事件过程是否也需要执行此检查
由于您的程序在保存(隐藏或取消隐藏行)之前执行了其他工作,因此您可能希望将其移动到单独的Sub中并从任何需要它的事件过程中调用它