Excel 根据两个不同的单元格更改选项卡颜色(if语句)
我试图按照if逻辑更改单元格C32和C46的选项卡颜色。尽管这种逻辑对大多数人有效,但有些逻辑并没有给我带来正确的色彩。我对VBA不是很熟悉 什么不起作用: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=
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
事件(这是您的意图吗?)如果是,请更改我的代码以使用它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宏,所以我知道的不多。成功了。非常感谢你抽出时间回答我的问题。