Как написать VBA для Do До последней строки набора данных - PullRequest
0 голосов
/ 10 апреля 2019

Я новичок в VBA и ищу запуск кода для окрашивания ячеек в строках определенным цветом. Я использую DO UNTIL и всегда заканчиваю дополнительной цветной ячейкой. Какой лучший способ преодолеть это.

Таблица, с которой я работаю, выглядит следующим образом,

  1. Номер / Имя
  2. 1 / test_01
  3. 2 / test_02
  4. 3 / test_03
  5. 4 / test_04
  6. 5 / test_05

и продолжается, и конец будет меняться при каждом запуске кода.

Я настроил тестовый лист, чтобы запустить основную идею, чтобы я мог расширить ее, как только она будет работать правильно. Этот специфический тест делит столбец A (Число) на 2, и если есть остаток от 1, то он будет окрашен в одну сторону, а если нет, то будет окрашен другой.

Sub Button2_Click()
Dim row_cnt As Integer
row_cnt = 1

Do Until Sheets("sheet1").Range("A" & row_cnt).Value = ""
row_cnt = row_cnt + 1
        If Sheets("sheet1").Range("A" & row_cnt).Value Mod 2 <> 0 Then
        Range("A" & row_cnt & ":B" & row_cnt).Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = -0.249977111117893
            .PatternTintAndShade = 0
    End With
    Else
        Range("A" & row_cnt & ":B" & row_cnt).Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent4
            .TintAndShade = -0.249977111117893
            .PatternTintAndShade = 0
        End With
    End If
Loop
End Sub

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

Ответы [ 2 ]

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

Чтобы ответить на конкретный вопрос «Почему мой Do Until не работает»:

Это потому, что вы тестируете на основе значения row_cnt, а затем сразу увеличиваете его внутри цикла, поэтому обрабатывайте следующую строку.

Чтобы исправить это, передвиньте приращение до значения Loop и настройте инициализацию row_cnt

Что касается примечания, вы должны использовать Long, а не Integer в качестве типа данных счетчика

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

вы можете динамически найти последнюю строку, например:

lr = cells(rows.count,1).end(xlup).row
row_cnt = 1
Do until row_cnt = lr+1 'so you get actions on your last row
    'do stuff
    row_cnt = row_cnt + 1
loop

, если вы можете избежать vba для этого, предложение bigben об условном форматировании будет твердым

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