【问题标题】:Modify cell range color based on value of one cell根据一个单元格的值修改单元格范围颜色
【发布时间】:2015-11-16 11:15:13
【问题描述】:

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

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

帮助?

【问题讨论】:

标签: vba excel colors


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以查看条件格式,看看是否对您有帮助。这可能比 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 forcolorIndex 的快速摘要。

    再次,我可能会先研究条件格式,看看是否可行 - 如果您手动更改单元格,条件格式将动态更改单元格颜色,而无需运行宏。如果要设置很多条件,也许可以考虑进行条件格式设置,但将 VBA 作为代码的一部分?只是一个想法。

    【讨论】:

    • Status 似乎是一个 ComboBox,就像 Category 一样
    • @DragonSamu 啊 - 我对组合框不太熟悉,但我希望上述想法仍然有效 - 他们应该,不是吗?
    • 如果代码放在模块中而不是用户窗体中,则不会发生冲突。在 UserForm 之外,您需要引用 UserForm1.Status.Value 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    相关资源
    最近更新 更多