Нужен код VBA, который для диапазона ячеек сначала находит ячейки определенного цвета, а затем для этих ячеек находит пустые - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь написать код для Excel в VBA, который просматривает диапазон ячеек, в этом примере Range B4: B15, и сначала определяет, какие ячейки имеют желтый цвет FILL (цвет интерьера). Затем из ячеек желтого цвета в этом диапазоне он определяет, являются ли какие-либо из этих ячеек желтого цвета пустыми. Я хочу, чтобы он просматривал весь диапазон (B4: B15), и если ЛЮБОЙ из желтых ячеек пуст, он выдаст сообщение для всего диапазона, говорящее «есть пустые желтые ячейки».

Я знаю, что мне нужно использовать If Range.interior.color = 65535 Тогда, чтобы определить, какие ячейки желтые. Я знаю, что мне нужно использовать If WorksheetFunction.countA (range) = 0 Тогда, чтобы сказать, какие ячейки в диапазоне пустые. Моя проблема в том, что я не могу собрать все это вместе. Я использую Для каждого rcell в цикле r, чтобы определить, какие ячейки окрашены в желтый цвет, но затем мне нужен способ, чтобы код собирал информацию о том, какие из этих ячеек окрашены в желтый цвет, а затем ТОЛЬКО ИЗ ЭТИХ КЛЕТОК, скажите мнекакие из них пустые. Мне трудно понять, как создать новый «поддиапазон», в котором только ячейки окрашены в желтый цвет.

Это то, что я пробовал, но не могу собрать все это вместе.

Sub Input_Checker_test()
    Dim ws As Worksheet
    Set ws = Sheets("Main")
    Dim r As Range
    Dim rcell As Range
    Dim rmain As Range
    Dim rmaincell As Range
    Set r = Range("B4:B15").Cells   
    For Each rcell In r   
        If rcell.Interior.Color = 65535 Then
            rcell = rmain
        End If
    Next rcell
    For Each rmaincell In rmain
        If WorksheetFunction.CountA(rmain) = 0 Then
            MsgBox ("Cells are empty")
        Else
            MsgBox ("Cells are full")
        End If     
    Next rmaincell           
End Sub

Я хочу, чтобы он просмотрел весь диапазон (B4: B15), и если ЛЮБОЙ из желтых ячеек в этом диапазоне не заполнен, он выдаст сообщение для всего диапазона, говорящее «есть желтые ячейки, которыепустые "

1 Ответ

0 голосов
/ 17 октября 2019

Я немного растерялся, потому что вы сказали шрифт, а затем интерьер. Если есть желтый шрифт, то должно быть значение, поэтому я предположил, что вы имели в виду интерьер. Поскольку вам нужен только один из них, чтобы соответствовать вашим критериям, вам не нужно создавать поддиапазон. Вы можете проверить, соответствуют ли какие-либо ячейки обоим критериям.

Sub Input_Checker_test()

    Dim ws As Worksheet
    Set ws = Sheets("Main")

    Dim r As Range
    Dim rcell As Range
    Dim YellowCount as Integer
    Dim EmptyCount as Integer
    Set r = ws.Range("B4:B15")

    For Each rcell In r
        If rcell.Interior.Color = 65535 Then
            YellowCount = 1
            If IsEmpty(rcell) Then
                EmptyCount = 1
            End If
        End If
    Next rcell

    If YellowCount > 0 Then
        MsgBox "There are yellow cells"
    End If

    If EmptyCount > 0 Then
        MsgBox "There are empty cells"
    End If


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