突出显示以要单击的另一个单元格为条件的单元格

时间:2018-08-14 16:26:25

标签: excel vba conditional highlight

我有可以工作的VBA代码,但似乎不是最佳选择。单击N列中的单元格时,代码应更改H和I列中相关单元格中文本的颜色。

例如,当单击单元格N5时,单元格H5和I5中的文本应变为白色。取消单击后,它们将恢复为正常颜色。

该代码似乎不是最佳的,因为I列中的更改落后于H列中的更改。

我想同时改变两者的方法。

(如果可以使单元格改变颜色并立即变为粗体,则奖励点,与颜色一样,一旦取消选中该单元格,粗体就会消失)。

<VirtualHost example.com:80>
    # ...

    SetEnv APP_ENV prod
    SetEnv APP_DEBUG 0
    SetEnv APP_SECRET d815b8d0c26835bb7ba2a920ef1cbb0b

    # ...
</VirtualHost>

请注意,这是我第一次编写VBA,因此是业余爱好者。

1 个答案:

答案 0 :(得分:1)

您无需分别解决每一列...

编辑:添加了粗体和多个单元格

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

总是值得考虑的是,如果用户选择多个单元格(甚至整个列),将会发生什么。鲁棒地处理此问题有时会是一个挑战,这取决于您执行此操作时想要发生什么。