Создание циклов в Excel VBA - PullRequest
       4

Создание циклов в Excel VBA

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

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

Sub Loop
Range("G6:AM37").Interior.ColorIndex = 0  'No fill colour for all cells in the range to clear the last colouring

Dim ColRange As Range

For RR = 1 To 33   'Loop through Rows
 For CC = 1 To 31  'Loop through col.
    ''''''''''''''''''''''''''''''''''''''''''
    Dim MM As Variant
    Set ColRange = Cells(RR + 5, CC + 6)
    MM = Mid(ColRange, 9, 2)
        If MM = "" Then
             ColRange.Interior.ColorIndex = 0  ' no colour
             Exit For
         ElseIf CInt(MM) > 39 Then
            ColRange.Interior.ColorIndex = 50
        ElseIf CInt(MM) < 40 Then
            ColRange.Interior.ColorIndex = 38
        End If
    ''''''''''''''''''''''''''''''''''''''''''
    Next
Next

1 Ответ

2 голосов
/ 09 апреля 2019

Просто избавьтесь от Exit For.В первой ячейке, которая соответствует первой If, вы покидаете цикл.

Также обратите внимание, что вы можете иметь переменные цикла, начиная с 6, поэтому вам не нужно записывать RR + 5 при обращении кномера строк внутри цикла.

Это не часть вопроса, но после внесения предложенного мной изменения, скорее всего, вы получите ошибку при попытке конвертировать MM в Int.Если MM является строкой, CInt(MM) выдаст ошибку.Поэтому, прежде чем оценивать CInt (MM), вы должны иметь ветку If IsNumeric(MM) = False и придумать форматирование для этого случая (или ничего не делать в этом случае).

Кроме того, Integer - это небольшой тип данных, используйтеДолго вместо этого.Вы можете конвертировать в Long с помощью CLng.

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