Отмена = True не работает в Workbook_BeforeClose - PullRequest
1 голос
/ 23 мая 2019

imageCancel is set to True">

Это ясно показывает, что значение отмены истинно, и после этого моя книга закрывается! Почему?

Я хочу отменить закрытие файла 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 ]

2 голосов
/ 23 мая 2019

Измените имя 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

Или даже короче:

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = check_for_error

    If Not Cancel Then
        Application.EnableEvents = False
        Sheet1.Cells.ClearContents
        Sheet2.Cells.Clear
        Application.EnableEvents = True
    End If
End Sub

Function check_for_error() As Boolean
    'check and return
    check_for_error = True 'errors found
End Function
0 голосов
/ 23 мая 2019

Изначально Cancel равно False, означает, что File Close завершится успешно.Для меня приведенный ниже код работает нормально.Когда я устанавливаю error = 1, закрытие отменяется, используете ли вы «Exit Sub» или нет.Когда я устанавливаю ошибку <> 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

Просто проверьте это: Write False, и книга должна закрыться, а True должен "остановить" закрытие.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Cancel = False

End Sub
0 голосов
/ 23 мая 2019

Попробуй это.Установите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...