Как проверить, если Range.Interior.ColorIndex = xlNone простым способом? - PullRequest
0 голосов
/ 16 апреля 2019

Я пробовал несколько способов проверить, является ли любая ячейка в пределах диапазона цветным, и задался вопросом, существует ли более простой способ сделать то же самое.

Моя первая попытка:

If Range("A1:O50").Interior.ColorIndex = xlNone Then MsgBox ("Nothing is colored") Else MsgBox ("Sth is colored")

Это сработало хорошо, хотя я действительно хочу запускать sth, когда любая ячейка в пределах диапазона окрашена.


2-я попытка:

If Not Range("A1:O50").Interior.ColorIndex = xlNone Then MsgBox ("Sth is colored") Else MsgBox ("Nothing is colored")

Это не сработало. Кажется, что VBA не понимает отрицание "Range.Interior.ColorIndex = xlNone".

Я знаю, что могу сделать это так:

If Range("A1:O50").Interior.ColorIndex = xlNone Then Else MsgBox ("Sth is colored")

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


3-я попытка:

If CBool(Range("A1:O50").Interior.ColorIndex = xlNone) = False Then MsgBox ("Sth is colored")

На этот раз я попытался преобразовать ... ColorIndex = xlNone вещь в логическое значение, но он вернул «недопустимое использование нуля», когда любая ячейка была фактически окрашена.


4-я попытка:

Dim b As Boolean
If Range("A1:O50").Interior.ColorIndex = xlNone Then b = True Else b = False
If b = False Then MsgBox ("Sth is colored")

Работало нормально, но не достаточно просто для меня. Я хочу сделать это в 1-2 строки и не использовать переменную, если это возможно.

Есть ли более простой способ выполнить ту же задачу? Любое вдохновение ценится. Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

@ Nacorid @EvR

Спасибо за ваши предложения!В конце концов я понял, какой ответ мне нужен.

If Not Range("A1:B1").Interior.ColorIndex = xlNone Or IsNull(Range("A1:B1").Interior.ColorIndex) Then MsgBox ("colored")

Теперь я могу выполнить проверку Interior.ColorIndex в одной строке, плюс я могу добавить все остальные условия в эту одну строку.Еще раз спасибо за ваши советы:)

0 голосов
/ 16 апреля 2019

Как насчет этого:

Sub test()
Dim cell As Range
Dim rng As Range
Dim sht As Worksheet
Dim n As Long
n = 0
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set rng = sht.Range("A1:O20")
For Each cell In rng.Cells
    If cell.Interior.ColorIndex <> xlNone Then
        n = n + 1
    End If
Next cell
Debug.Print n & " colored cells found"
End Sub
0 голосов
/ 16 апреля 2019

Вы можете поместить его в оператор выбора Case;Результат Range ("A1: O50"). Interior.ColorIndex может быть xlNone, Null или Long, но Null не может быть пойман с помощью оператора Select (так как предложение Else) и не требует переменных, плюс его легко расширитьс большим количеством условий.

    Select Case Range("A1:O50").Interior.ColorIndex
        Case xlNone: MsgBox "Nothing is colored"
        Case Else: MsgBox "Sth is colored"
    End Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...