这清楚地表明cancel的值是正确的,但在此之后我的工作簿仍然关闭!为什么?
如果用户输入不正确,我想取消关闭excel文件。
我调试了代码,发现Cancel的值最初为False,然后变为True。但是Sub结束后,文件仍然关闭。
(可变错误是在工作簿声明空间定义的,因此可以在模块中访问。)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
error = 0
check_for_error
If error = 1 Then
Cancel = True
Exit Sub
End If
Application.EnableEvents = False
Sheet1.Cells.ClearContents
Sheet2.Cells.Clear
Application.EnableEvents = True
End Sub
如果错误= 1,我想取消关闭文件。
更新:: 谢谢大家的回答,但似乎对我没有任何帮助!以下是我当前代码的外观。
Option Explicit
Dim errYes As Byte
Private Sub Workbook_BeforeClose(Cancel As Boolean)
check_freeze_panel
If errYes = 1 Then
Cancel = True
Exit Sub
End If
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
End Sub
errYes返回1,Cancel = True
正在执行,但我的工作簿仍关闭。
我什至尝试注释所有代码,然后按照建议放Cancel = True
并猜测是什么,它仍然关闭!
答案 0 :(得分:2)
更改名称[0-9]+\.[0-9]+
,这是已经存在的函数的保留字(请参见Error function),不得用作变量名。然后激活error
并声明所有变量。
下面是一个如何正确执行操作的示例:
Option Explicit
或更短:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ErrorsFound As Boolean
ErrorsFound = check_for_error
If ErrorsFound Then
Cancel = True
Exit Sub
End If
Application.EnableEvents = False
Sheet1.Cells.ClearContents
Sheet2.Cells.Clear
Application.EnableEvents = True
End Sub
Function check_for_error() As Boolean
'check and return
check_for_error = True 'errors found
End Function
答案 1 :(得分:0)
尝试一下。设置Error
等于您的函数调用,并确保它返回正确的数据类型。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
error = check_for_error
If error = 1 Then
Cancel = True
Exit Sub
End If
Application.EnableEvents = False
Sheet1.Cells.ClearContents
Sheet2.Cells.Clear
Application.EnableEvents = True
End Sub
答案 2 :(得分:0)
最初,Cancel等于False,表示文件关闭将成功。 对我来说,下面的代码工作正常。当我设置error = 1时,无论是否使用“退出子”,关闭都将被取消。当我设置错误<> 1然后cls 当我测试您的代码时:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim error As Integer
error = 1
If error = 1 Then
Cancel = True
'Exit Sub
End If
End Sub
只需测试一下: 写False,工作簿应该关闭,而True应该“停止”关闭。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = False
End Sub