根据下拉列表选择更改整个 table 行的背景颜色 - 条件格式
Change the background color of a whole table line based on a drop down list selection - conditional formatting
在我的 table (Range("A3:K9999")) 中有一列 E (E3:E9999),其中包含下拉列表。
我的目标是改变整个 table 行的背景颜色,用户在该行中选择 E 列的下拉列表中的一项。
在名为“输入”的第二个工作表中是一个 table (A4:A7),其中包含该列表框的选择 table 项。
到目前为止,这是我的代码:
Sub Auto_Open() 'ConditionalFormatting
Dim rg As Range
Set rg = Worksheets(1).Range("A3:K9999")
'clear any existing conditional formatting
rg.FormatConditions.Delete
'define the formatting conditions
Dim cond1, cond2, cond3, cond4 As FormatCondition
Set cond1 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A4")
Set cond2 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A5")
Set cond3 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A6")
Set cond4 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A7")
'define the formatting applied for each condition
With cond1
.Interior.Color = vbYellow
End With
With cond2
.Interior.Color = vbRed
End With
With cond3
.Interior.Color = vbGreen
End With
With cond4
.Interior.Color = vbBlue
End With
End Sub
当我打开 excel 文件时,我只是在 table 中得到一些疯狂的颜色...主要是黄色。即使列表框中没有进行任何选择。我怎样才能使这段代码在整个 E 列 (E3:E9999) 的每个下拉列表中正常工作,Sub "Auto_Open()" 是正确的位置吗?并且条件公式中是否存在引用错误?
VBA 带数据验证的条件格式
Sub AddConditionalFormatting()
Const sName As String = "Input"
Const sAddress As String = "A4:A7"
Const dAddress As String = "A3:K9999"
Const dColumn As Long = 5
Dim dColors As Variant
dColors = VBA.Array(vbYellow, vbRed, vbGreen, vbBlue)
Dim sws As Worksheet: Set sws = ThisWorkbook.Worksheets("Input")
Dim srg As Range: Set srg = sws.Range(sAddress)
Dim dws As Worksheet: Set dws = ThisWorkbook.Worksheets(1) ' improve!
Dim drg As Range: Set drg = dws.Range(dAddress)
drg.FormatConditions.Delete
Dim sCell As Range
Dim r As Long
For Each sCell In srg.Cells
r = r + 1
drg.FormatConditions.Add Type:=xlExpression, _
Formula1:="=" & drg.Cells(dColumn).Address(0) & "='" & sName _
& "'!" & srg.Cells(r).Address
drg.FormatConditions(drg.FormatConditions.Count) _
.Interior.Color = dColors(r - 1)
Next sCell
MsgBox "Conditional formatting added.", vbInformation
End Sub
在我的 table (Range("A3:K9999")) 中有一列 E (E3:E9999),其中包含下拉列表。
我的目标是改变整个 table 行的背景颜色,用户在该行中选择 E 列的下拉列表中的一项。 在名为“输入”的第二个工作表中是一个 table (A4:A7),其中包含该列表框的选择 table 项。
到目前为止,这是我的代码:
Sub Auto_Open() 'ConditionalFormatting
Dim rg As Range
Set rg = Worksheets(1).Range("A3:K9999")
'clear any existing conditional formatting
rg.FormatConditions.Delete
'define the formatting conditions
Dim cond1, cond2, cond3, cond4 As FormatCondition
Set cond1 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A4")
Set cond2 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A5")
Set cond3 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A6")
Set cond4 = rg.FormatConditions.Add(xlExpression, Formula1:="=$E3=Input!A7")
'define the formatting applied for each condition
With cond1
.Interior.Color = vbYellow
End With
With cond2
.Interior.Color = vbRed
End With
With cond3
.Interior.Color = vbGreen
End With
With cond4
.Interior.Color = vbBlue
End With
End Sub
当我打开 excel 文件时,我只是在 table 中得到一些疯狂的颜色...主要是黄色。即使列表框中没有进行任何选择。我怎样才能使这段代码在整个 E 列 (E3:E9999) 的每个下拉列表中正常工作,Sub "Auto_Open()" 是正确的位置吗?并且条件公式中是否存在引用错误?
VBA 带数据验证的条件格式
Sub AddConditionalFormatting()
Const sName As String = "Input"
Const sAddress As String = "A4:A7"
Const dAddress As String = "A3:K9999"
Const dColumn As Long = 5
Dim dColors As Variant
dColors = VBA.Array(vbYellow, vbRed, vbGreen, vbBlue)
Dim sws As Worksheet: Set sws = ThisWorkbook.Worksheets("Input")
Dim srg As Range: Set srg = sws.Range(sAddress)
Dim dws As Worksheet: Set dws = ThisWorkbook.Worksheets(1) ' improve!
Dim drg As Range: Set drg = dws.Range(dAddress)
drg.FormatConditions.Delete
Dim sCell As Range
Dim r As Long
For Each sCell In srg.Cells
r = r + 1
drg.FormatConditions.Add Type:=xlExpression, _
Formula1:="=" & drg.Cells(dColumn).Address(0) & "='" & sName _
& "'!" & srg.Cells(r).Address
drg.FormatConditions(drg.FormatConditions.Count) _
.Interior.Color = dColors(r - 1)
Next sCell
MsgBox "Conditional formatting added.", vbInformation
End Sub