根据一个单元格的值修改单元格区域的颜色

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

这一切都按预期工作,没有任何问题。 现在我需要它根据状态改变到行的背景颜色。 我试过search和使用不同的代码,没有运气。

帮帮我?

你可以看看条件格式,看看是否会帮助你。 这比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! ,它会使电池变黄。 请参阅这里获取 colorIndex的快速总结。

再次,我可能会首先查看条件格式,看看是否可行 – 条件格式会dynamic更改单元格颜色,如果手动更改单元格,而不必运行macros。 如果需要设置很多条件,可能会考虑使用条件格式,但将VBA作为代码的一部分? 只是一个想法。

这将根据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