取消= True在Workbook_BeforeClose中不起作用

时间:2019-05-23 13:44:32

标签: excel vba

Debug Mode, showing that value of <code>Cancel</code> is set to <code>True</code>

这清楚地表明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并猜测是什么,它仍然关闭!

3 个答案:

答案 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