2015-10-30 7 views
-1

Я искал похожие темы, но не смог найти правильное решение моей проблемы.Условные строки форматирования VBA

Цель:
У меня есть первенствовать лист, где я помещал данные о моей работе исследовании: -ФИРМЫ, должность, приложение отправленной дате, ..., и, наконец, количество дней прошли между приложением дату и сегодняшнюю дату.

Мне нужен макрос, который проверяет количество дней, ожидаемых за позицию (значение в столбце I), и условно применяет цвет к всей строке. Таким образом, я могу хорошо следить за работой.

Код, используемый

Sub outofdate() 
Range("I4").Select 
Range(Selection, Selection.End(xlDown)).Select 
numrow = Selection.Rows.Count 

For r = 4 To numrow 
    c = Cells(r, 9).Value 
    Select Case c 
      Case Is = 7 < c < 10 
      ColorIndex = 4 
      Case Is = 10 < c < 15 
      ColorIndex = 45 
      Case Is = 15 < c < 21 
      ColorIndex = 3 

    End Select 'c 

    With Range(Cells(r, 1), Cells(r, 9)).Select 
     Selection.Interior.Color = ColorIndex 
    End With 
Next 
End Sub 

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

Спасибо за ваше время, я пытался выяснить, что пошло не так, но мои знания, кажется, останавливаются здесь.

+3

Вы понимаете, просто без VBA? – pnuts

+0

Следующее на @pnuts comment - выберите свой диапазон, затем Главная на ленте, затем условное форматирование. Существует несколько вариантов создания форматов, даже для формулы. –

+1

Я не совсем уверен, почему вы хотите сделать это с помощью VBA, не можете ли вы сделать это легко с построением условных опций форматирования внутри Excel? – BasDeBeer

ответ

0

Проблема заключается в том, что если код для черного равен нулю, а переменная цвет никогда не изменяется от нуля, так что это даст вам черный цвет , Также нотация для «Select Case» не работает должным образом.

Sample for Select Case

Option Explicit 

Sub outofdate() 

    Dim rWorkRange As Range 
    Dim r As Range 
    Dim lColorIndex As Long 
    Dim lValue As Long 

    ' Set the range for the loop. 
    Set rWorkRange = Range(Range("I4"), Range("I4").End(xlDown)) 

    ' Loop through the range. 
    For Each r In rWorkRange 

     lValue = r.Value 

     ' Select each case, make sure that the else sets the 
     ' lColorIndex variable to the default "0" 
     Select Case lValue 
      Case 7 To 10 
       lColorIndex = 4 
      Case 10 To 15 
       lColorIndex = 45 
      Case 15 To 21 
       lColorIndex = 3 
      Case Else 
       lColorIndex = 0 
     End Select 

     ' Check for the "0" value (This is the black color) 
     ' if the lColorIndex is zero then skip. 
     If Not lColorIndex = 0 Then 
      Cells(r.Row, 1).Resize(, 9).Interior.ColorIndex = lColorIndex 
     End If 
    Next r 

End Sub 

Надеется, что это помогает :)

+0

Действительно, это помогло! благодаря ! Теперь я понимаю логику, единственной точкой, которую я не получаю, является «lValue = r.Value» –

+0

«lValue = r.Value» используется для получения значения ячейки в цикле – newjenn

+0

, вы правы, я я помещаю значение в диапазон в переменной для последующей проверки. –

0

Я использовал если и еще, если вместо выбора случае

Sub outofdate() 


    Dim numrow As Long 

    numrow = ActiveSheet.Range("I" & Rows.Count).End(xlUp).Row 

    For r = 4 To numrow 
    c = Cells(r, 9).Value 


    If c > 7 And c < 10 Then 

     Cells(r, 9).EntireRow.Interior.ColorIndex = 4 

    ElseIf c > 10 And c < 15 Then 

      Cells(r, 9).EntireRow.Interior.ColorIndex = 45 

    ElseIf c > 15 And c < 21 Then 

     Cells(r, 9).EntireRow.Interior.ColorIndex = 3 

    End If 

    Next 

    End Sub 
+0

Действительно, это сработало, но это было только выделение ячейки, а не всей строки. –

+0

@ M.O - простое исправление, просто измените строки, заканчивающиеся на '.ColorIndex', на' Cells (r, 9) .EntireRow.Interior.ColorIndex' (добавьте бит EntireRow). Затем он выделит всю линию! – BruceWayne

+0

@BruceWayne Спасибо. Я внес изменения в решение. – newjenn

Смежные вопросы