根据一个单元格的值修改单元格范围颜色

时间:2015-08-22 16:41:50

标签: excel vba excel-vba colors

我正在使用userform来填充电子表格中的单元格,但我无法弄清楚如何根据其中一个单元格中的值更改填充行中单元格的背景颜色。我对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

这一切都按预期运行,没有任何问题。现在我需要它根据状态更改为行的背景颜色。我尝试过搜索并使用不同的代码而没有运气。

帮助?

2 个答案:

答案 0 :(得分: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作为代码的一部分?只是一个想法。

答案 1 :(得分: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