Excel 根据两个不同的单元格更改选项卡颜色(if语句)

Excel 根据两个不同的单元格更改选项卡颜色(if语句),excel,vba,if-statement,tabs,Excel,Vba,If Statement,Tabs,我试图按照if逻辑更改单元格C32和C46的选项卡颜色。尽管这种逻辑对大多数人有效,但有些逻辑并没有给我带来正确的色彩。我对VBA不是很熟悉 什么不起作用: C32= Fail and C46= Not Complette (brings me green instead of red) C32= Not applicable and C46= Not Applicable (brings me red instead of gray) C32= Not applicable and C46=

我试图按照if逻辑更改单元格C32和C46的选项卡颜色。尽管这种逻辑对大多数人有效,但有些逻辑并没有给我带来正确的色彩。我对VBA不是很熟悉

什么不起作用:

C32= Fail and C46= Not Complette (brings me green instead of red)
C32= Not applicable and C46= Not Applicable (brings me red instead of gray)
C32= Not applicable and C46= Not Complete (brings me green instead of gray)
C32= Not Complete and C46= Not Complete (brings me green instead of gray)
C32= Not Complete and C46= Not Applicable (brings me red instead of gray)
请帮忙。修复起来似乎很简单,但可以找到解决方案

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Range("$C$32").Value = "Pass" And Range("$C$46").Value = "Pass" Or Range("$C$46").Value = "Not Complete" Then
         Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Pass" And Range("$C$46").Value = "Not Applicable" Then
        Me.Tab.ColorIndex = 48
    ElseIf Range("$C$32").Value = "Pass" And Range("$C$46").Value = "Fail" Then
        Me.Tab.Color = vbRed
    ElseIf Range("$C$32").Value = "Fail" And Range("$C$46").Value = "Fail" Or Range("$C$46").Value = "Not Complete" Or Range("$C$46").Value = "Not Applicable" Then
        Me.Tab.Color = vbRed
    ElseIf Range("$C$32").Value = "Fail" And Range("$C$46").Value = "Pass" Then
        Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Not Applicable" And Range("$C$46").Value = "Not Applicable" Or Range("$C$46").Value = "Not Complete" Then
        Me.Tab.ColorIndex = 48
    ElseIf Range("$C$32").Value = "Not Applicable" And Range("$C$46").Value = "Fail" Then
        Me.Tab.Color = vbRed
    ElseIf Range("$C$32").Value = "Not Applicable" And Range("$C$46").Value = "Pass" Then
        Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Not Complete" And Range("$C$46").Value = "Not Applicable" Or Range("$C$46").Value = "Not Complete" Then
         Me.Tab.ColorIndex = 48
    ElseIf Range("$C$32").Value = "Not Complete" And Range("$C$46").Value = "Pass" Then
       Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Not Complete" And Range("$C$46").Value = "Fail" Then
        Me.Tab.Color = vbRed
    End If

End Sub
一些评论:
  • 您正在使用
    SelectionChange
    事件(这是您的意图吗?)如果是,请更改我的代码以使用它
  • 我在Select Case语句中组织了代码,该语句(IMO)更易于阅读
  • 我添加括号是为了更好地理解与C46相关的选项
  • 代码:

    Option Explicit
    
    Private Sub Worksheet_change(ByVal Target As Range)
        ' Suggest that you define a range to watch when changed for this (un comment and adjust next line if you consider it)
        ' If not intersect(Target, me.Range("c32:c46")) Then Exit sub
    
        changeColorTab Me, LCase$(Me.Range("c32").Value), LCase$(Me.Range("c46").Value)
    
    End Sub
    
    Private Sub changeColorTab(ByVal targetSheet As Worksheet, ByVal c32Value As String, ByVal c46Value As String)
    
        Dim targetcolor As Long
    
        Select Case True
        Case c32Value = "pass" And (c46Value = "pass" Or c46Value = "not complete")
            targetcolor = 10 ' Green
        Case c32Value = "pass" And c46Value = "not applicable"
            targetcolor = 48 ' Dark grey
        Case c32Value = "pass" And (c46Value = "fail")
            targetcolor = 3 ' Red
        Case c32Value = "fail" And (c46Value = "fail" Or c46Value = "not complete" Or c46Value = "not applicable")
            targetcolor = 3 ' Red
        Case c32Value = "fail" And c46Value = "pass"
            targetcolor = 10 ' Green
        Case c32Value = "not applicable" And (c46Value = "not applicable" Or c46Value = "not complete")
            targetcolor = 48 ' Dark grey
        Case c32Value = "not applicable" And c46Value = "fail"
            targetcolor = 3 ' Red
        Case c32Value = "not applicable" And c46Value = "pass"
            targetcolor = 10 ' Green
        Case c32Value = "not complete" And (c46Value = "not applicable" Or c46Value = "not complete")
            targetcolor = 48
        Case c32Value = "not complete" And c46Value = "pass"
            targetcolor = 10
        Case c32Value = "not complete" And c46Value = "fail"
            targetcolor = 3 ' Red
        Case Else
            targetcolor = -4142 ' Light grey
        End Select
    
        targetSheet.Tab.ColorIndex = targetcolor
    
    
    End Sub
    

    让我知道它是否工作

    除了正确发生的事情之外,还应该知道应该发生什么事情。为什么在
    me.Tab.ColorIndex
    me.Tab.Color
    之间切换?Hi@ricardo。非常感谢你!我通常不使用excel宏,所以我知道的不多。成功了。非常感谢你抽出时间回答我的问题。