【问题标题】:Highlight cell conditional on another cell being clicked以单击另一个单元格为条件突出显示单元格
【发布时间】:2019-01-21 13:50:51
【问题描述】:

我有有效的 VBA 代码,但似乎不是最佳的。当点击 N 列中的单元格时,代码应更改 H 列和 I 列中相关单元格中文本的颜色。

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

代码似乎不是最优的,因为 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,因此有点业余。

【问题讨论】:

    标签: excel vba conditional highlight


    【解决方案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
    

    如果用户选择了多个单元格(甚至是一列),那么总是值得思考会发生什么。稳健地处理这种情况有时是一项挑战,这取决于您希望他们这样做时发生的事情。

    【讨论】:

    • 哇,以前从未听说过.CountLarge,很整洁msdn.microsoft.com/en-us/vba/excel-vba/articles/…
    • 正是我所要求的。非常感谢。两个后续问题:我是否正确,您没有解决我最后提到的大胆问题(如果没有,绝对没有问题)?其次,我喜欢您如何使其对多个单元格具有鲁棒性,但是是否可以将功能扩展到多个单元格?无论如何,我的问题已经得到了实质性的回答,所以我会接受你的回答。非常感谢!
    • 查看我的编辑 - 字体颜色/粗体被分解为单独的子
    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2018-05-02
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多