以单击另一个单元格为条件突出显示单元格
Highlight cell conditional on another cell being clicked
我有 VBA 有效的代码,但似乎不是最佳的。单击 N 列中的单元格时,代码应更改 H 列和 I 列中相关单元格中文本的颜色。
例如,单击单元格 N5 时,单元格 H5 和 I5 中的文本应变为白色。取消点击后,它们 return 变为正常颜色。
该代码似乎不是最优的,因为 I 列中的更改落后于 H 列中的更改。
我想要一种让两者都立即改变的方法。
(如果您可以让单元格立即改变颜色并变成粗体,则加分,在喜欢颜色的约束下,一旦取消选择单元格,粗体就会消失)。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
Intersect(Columns("H"), ActiveSheet.UsedRange).Font.Color = vbBlack
Set r = Intersect(Range("N:N"), Target)
If r Is Nothing Then Exit Sub
Cells(r.Row, "H").Font.Color = vbWhite
Intersect(Columns("I"), ActiveSheet.UsedRange).Font.Color = vbBlack
Set r = Intersect(Range("N:N"), Target)
If r Is Nothing Then Exit Sub
Cells(r.Row, "I").Font.Color = vbWhite
End Sub
请注意,这是我第一次写VBA,因此任何业余爱好者。
您不需要分别处理每一列...
编辑:添加了粗体和多个单元格
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range, c As Range
Set r = Intersect(Me.Range("N:N"), Target)
'? what to do if user selects multiple cells ?
'E.g. - exit if user has >100 cells selected (possibly whole column)
If r Is Nothing Or Target.Cells.CountLarge > 100 Then Exit Sub
Application.ScreenUpdating = False
HighlightIt Application.Intersect(Me.Range("H:I"), Me.UsedRange), False
For Each c In r.Cells
HighlightIt Me.Cells(c.Row, "H").Resize(1, 2)
Next c
Application.ScreenUpdating = False
End Sub
'utility sub for highlighting/unhighlighting
Sub HighlightIt(rng As Range, Optional hilite As Boolean = True)
With rng
.Font.Color = IIf(hilite, vbWhite, vbBlack)
.Font.Bold = hilite
End With
End Sub
如果用户选择多个单元格(甚至一整列)会发生什么,总是值得考虑的。稳健地处理此问题有时是一个挑战,具体取决于您希望在他们这样做时发生什么。
我有 VBA 有效的代码,但似乎不是最佳的。单击 N 列中的单元格时,代码应更改 H 列和 I 列中相关单元格中文本的颜色。
例如,单击单元格 N5 时,单元格 H5 和 I5 中的文本应变为白色。取消点击后,它们 return 变为正常颜色。
该代码似乎不是最优的,因为 I 列中的更改落后于 H 列中的更改。
我想要一种让两者都立即改变的方法。
(如果您可以让单元格立即改变颜色并变成粗体,则加分,在喜欢颜色的约束下,一旦取消选择单元格,粗体就会消失)。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
Intersect(Columns("H"), ActiveSheet.UsedRange).Font.Color = vbBlack
Set r = Intersect(Range("N:N"), Target)
If r Is Nothing Then Exit Sub
Cells(r.Row, "H").Font.Color = vbWhite
Intersect(Columns("I"), ActiveSheet.UsedRange).Font.Color = vbBlack
Set r = Intersect(Range("N:N"), Target)
If r Is Nothing Then Exit Sub
Cells(r.Row, "I").Font.Color = vbWhite
End Sub
请注意,这是我第一次写VBA,因此任何业余爱好者。
您不需要分别处理每一列...
编辑:添加了粗体和多个单元格
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range, c As Range
Set r = Intersect(Me.Range("N:N"), Target)
'? what to do if user selects multiple cells ?
'E.g. - exit if user has >100 cells selected (possibly whole column)
If r Is Nothing Or Target.Cells.CountLarge > 100 Then Exit Sub
Application.ScreenUpdating = False
HighlightIt Application.Intersect(Me.Range("H:I"), Me.UsedRange), False
For Each c In r.Cells
HighlightIt Me.Cells(c.Row, "H").Resize(1, 2)
Next c
Application.ScreenUpdating = False
End Sub
'utility sub for highlighting/unhighlighting
Sub HighlightIt(rng As Range, Optional hilite As Boolean = True)
With rng
.Font.Color = IIf(hilite, vbWhite, vbBlack)
.Font.Bold = hilite
End With
End Sub
如果用户选择多个单元格(甚至一整列)会发生什么,总是值得考虑的。稳健地处理此问题有时是一个挑战,具体取决于您希望在他们这样做时发生什么。