Есть ли функция VBA, как IsNumeric, но для текста? IsText и IsEmpty не работают одинаково, когда задействован диапазон - PullRequest
1 голос
/ 06 марта 2019

Проблема: нужно иметь возможность проверить диапазон или одну ячейку, чтобы увидеть, если пусто.

Мой код для замены любого текста с галочкой выглядит следующим образом:

Private Sub Worksheet_Change(ByVal Target As Range)
' If the range (as defined in the next line) is changed to anything but a blank, replace it with a check mark.

If Not Intersect(Range(Target.Address), Range("C6:C60")) Is Nothing Then
    On Error GoTo ErrorOut
    Application.EnableEvents = False
    If Application.WorksheetFunction.IsText(Range(Target.Address)) Then
        Range(Target.Address).Value = "P"
        Range(Target.Address).Font.Name = "Wingdings 2"
    End If
    Application.EnableEvents = True
End If
Exit Sub

ErrorOut:
Debug.Print "Error"
Application.EnableEvents = True
End Sub

Оно работает.Но если пользователь выбирает более одной ячейки и удаляет их, обработка ошибок вступает во владение.Не проблема, потому что это работает, но должен быть лучший путь.

Я успешно делал это, когда хотел проверить номера с помощью If IsNumeric(Range(Target.Address)) Then.Это работает правильно, если несколько ячеек удаляются одновременно.Но IsText или IsEmpty, похоже, не ведут себя точно так же, как IsNumeric, и удаление сразу нескольких ячеек приводит к ошибке.

1 Ответ

1 голос
/ 06 марта 2019

Рассмотрим:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, r As Range, rIntersect As Range
    Dim wf As WorksheetFunction

    Set rng = Range("C6:C60")
    Set rIntersect = Intersect(Target, rng)
    Set wf = Application.WorksheetFunction

    If rIntersect Is Nothing Then Exit Sub
    Application.EnableEvents = False
        For Each r In rIntersect
            If wf.CountA(r) = 1 Then
                r.Value = "p"
                r.Font.Name = "Wingdings 2"
            End If
        Next r
    Application.EnableEvents = True

End Sub

Мы перебираем Intersection одну ячейку за раз.Кстати, я использую:

r.Value = "a"
r.Font.Name = "Marlett"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...