Worksheet_SelectionChange Возвращает ошибку, если условие ложно - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь сбросить форму , если выбор в столбце 4 и выбрана только 1 ячейка и следующая ячейка в столбце 3 пуста

Если условие истинно, оно работает

Но если условие ложно, появляется ошибка:

ошибка времени выполнения '13': несоответствие типов,

В строке if

Это код:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column = 4 And Target.Cells.Count = 1 And Target.Offset(, -1).Value = 0 Then

    C = Target.Offset(, -1).Address
    UserForm1.Show

End If

End Sub

1 Ответ

0 голосов
/ 19 апреля 2020

Выбор Изменить Бедствие

От двух до трех вопросов

Вы должны использовать CountLarge вместо Count. Если вы выберете слишком много ячеек, Count вызовет Run-time error '6': Overflow. Попробуйте сделать это, выбрав все ячейки на листе (CTRL+A).

Если вы выберите диапазон в столбце A, невозможность вычисления Target.Offset(, -1) приведет к Run-time error '1004': Application-defined or object-defined error.

* 1018. * Если выбрано несколько ячеек, то Target.Offset(,-1).Value приведет к массиву, который нельзя сравнить с 0, что приведет к Run-time error '13': Type mismatch.

Возможное решение

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Const ColumnNumber As Long = 4
    Const ColumnOffset As Long = -1
    Const OffsetValue As Long = 0

    Dim C As String

    With Target
        If .Column + ColumnOffset < 1 Or .Cells.CountLarge > 1 Then Exit Sub
        If .Column = ColumnNumber And .Offset(, ColumnOffset) = OffsetValue Then
            C = Target.Offset(, ColumnOffset).Address
            UserForm1.Show
        End If
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...