2015-08-22 11 views
1

Я использую пользовательскую форму для заполнения ячеек в электронной таблице, но я не могу понять, как изменить цвет фона ячеек в заполненной строке на основе значения в одной из этих клеток. Я довольно новичок в VBA, поэтому несите меня. Вот мой код пользовательской формы:Изменение цвета диапазона ячеек на основе значения одной ячейки

Private Sub CommandButton2_Click() 

Unload Me 

End Sub 

Private Sub Insert_Click() 

Dim emptyRow As Long 

Sheet1.Activate 

emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 

Cells(emptyRow, 1).Value = Category.Value 
Cells(emptyRow, 3).Value = Dt_Initiated.Value 
Cells(emptyRow, 6).Value = Due_Date.Value 
Cells(emptyRow, 4).Value = Requestor.Value 
Cells(emptyRow, 5).Value = Assigned_To.Value 
Cells(emptyRow, 7).Value = Status.Value 
Cells(emptyRow, 2).Value = Description.Value 

Unload Me 


End Sub 

Private Sub UserForm_Click() 

End Sub 

Private Sub UserForm_Initialize() 

With Category 
    .AddItem "Chaplain" 
    .AddItem "Jag" 
    .AddItem "Medical" 
    .AddItem "Personnel" 
    .AddItem "Red Cross" 
    .AddItem "Misc" 
End With 

With Status 
    .AddItem "Initiated" 
    .AddItem "Pending" 
    .AddItem "Complete" 
End With 

End Sub 

Все это работает без проблем. Теперь мне нужно изменить цвет фона строки на основе состояния. Я пробовал искать и использовать другой код без везения.

Помогите?

+0

Основываясь на том, что вы должны изменить цвет? Я бы предложил посмотреть [условное форматирование] (http://www.techonthenet.com/excel/questions/cond_format1_2010.php), чтобы решить этот вопрос. – DragonSamu

ответ

0

Вы можете посмотреть в Условное форматирование и посмотреть, поможет ли это вам. Это может быть более простым, чем VBA. Сказав это, вот краткий обзор того, как вы можете установить цвет для ячейки. (PS: Что такое Status, как указано в вашем коде, диапазон да?).

Sub testColors() 
Dim myRow as Integer 
Dim Status as String, celStatus as String 
Dim rng as Range, cel as Range 

Status = "Confirmed!" ' some string you want to find matches for 

Set rng = Range(Cells(1,1),Cells(100,1)) ' Equivalent to Range("A1:A100") 
For each cel in rng 
    if cel.value = Status then 
     cel.entireRow.interior.colorindex = 6 
    End if 
next cel 
End Sub 

Итак, если вы хотите установить цвет строки на основе статуса, вы могли бы сделать что-то вроде следующего:

... 
For each cel in rng 
Select case cel.Value 
    case "Color yellow!" 
    cel.entireRow.interior.colorindex = 6 
    case "Color green!" 
    cel.entireRow.interior.colorindex = 4 
...etc, etc. 
End select 
next cel 

Это будет цикл через диапазон, и если значение ячейки это Color yellow!, цвет будет окрашен в желтый цвет. См. here for краткое резюме colorIndex.

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

+0

Состояние похоже на ComboBox, как и на Категория – DragonSamu

+0

@DragonSamu ah - Я не слишком знакомы с ComboBoxes, я надеюсь, что вышеупомянутые идеи все равно будут работать, хотя они должны, нет? – BruceWayne

+0

Если код помещен в модуль, а не внутри Userform, он не будет конфликтовать. Поскольку вне UserForm вам нужно ссылаться как UserForm1.Status.Value и т. Д. – DragonSamu

0

Это окрасит все строки в зависимости от значения в coloumn 7:

Sub Macro2() 
' 


' 

Dim i As Long 

For i = 2 To emptyRow 
If Cells(i, 7).Value = "Pending" Then 
Range(Cells(i, 1), Cells(i, 7)).Interior.ColorIndex = 6 

    End If 

    If Cells(i, 7).Value = "Initiated" Then 
Range(Cells(i, 1), Cells(i, 7)).Interior.ColorIndex = 7 

    End If 
    If Cells(i, 7).Value = "Complete" Then 
Range(Cells(i, 1), Cells(i, 7)).Interior.ColorIndex = 8 

    End If 
    Next i 


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