簡體   English   中英

突出顯示以要單擊的另一個單元格為條件的單元格

[英]Highlight cell conditional on another cell being clicked

我有可以工作的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,因此是業余愛好者。

您不需要分別解決每一列...

編輯:添加了粗體和多個單元格

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

始終值得考慮的是,如果用戶選擇多個單元格(甚至整個列),將會發生什么。 穩健地處理此問題有時會是一個挑戰,這取決於您在執行此操作時想要發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM