【问题标题】:VBA Excel Highlighting cells based on cell inputVBA Excel根据单元格输入突出显示单元格
【发布时间】:2018-07-17 06:34:00
【问题描述】:

当用户在单元格中输入任何值时,我正在尝试创建一个 VBA 脚本来突出显示特定范围的单元格。例如,我的单元格范围将是 a1:a5,如果用户在该范围内的任何单元格中输入任何值,则单元格 a1 到 a5 将以所需的颜色突出显示。我是 VBA 的新用户,在搜索了一段时间后发现下面的代码可能有用。寻求建议。谢谢。

Private Sub Highlight_Condition(ByVal Target As Range)

Dim lastRow As Long
Dim cell As Range
Dim i As Long
With ActiveSheet
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
Application.EnableEvents = False
For i = lastRow To 1 Step -1

If .Range("C" & i).Value = "" Then
    Debug.Print "Checking Row: " & i
    .Range("A" & i).Interior.ColorIndex = 39
    .Range("F" & i & ":AW" & i).Interior.ColorIndex = 39
Next i
  Application.EnableEvents = True
End With
End Sub

编辑:尝试编辑 teylyn 给出的代码,以便在删除单元格值时能够从单元格中删除突出显示,但是我似乎找不到解决方案。 (当单元格中有输入时,原始代码将突出显示单元格,但是如果您删除单元格值,突出显示仍然存在。)

If Not Intersect(Target, Range("A12:F12")) Is Nothing Then

    With Range("A12:F12").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

ElseIf IsEmpty(Range("A12:F12").Value) = True Then
       With Range("A12:F12").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65536
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End If

【问题讨论】:

  • 为什么使用 VBA 而不是条件格式?

标签: excel vba


【解决方案1】:

此代码执行您所描述的操作,即在编辑该范围内的任何单元格时为范围 A1 设置填充颜色。

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:A5")) Is Nothing Then

    With Range("A1:A5").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

End If
End Sub

这段代码需要放在sheet模块中。

编辑:如果您希望在五个单元格都没有值的情况下使突出显示消失,那么您可以尝试这个变体:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim valCount As Long

If Not Intersect(Target, Range("A1:A5")) Is Nothing Then
' a cell in Range A1 to A5 has been edited
' we don't know if that edit was adding or deleting a cell, so ...
' ... we count how many cells in that range contain values

valCount = WorksheetFunction.CountA(Range("A1:A5"))

    If valCount > 0 Then
    ' the range has values, so highlight
        With Range("A1:A5").Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 65535
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    Else
    ' the range has no values, so remove the highlight
        With Range("A1:A5").Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End If
End If
End Sub

【讨论】:

  • 谢谢。我一直在测试代码,我注意到在您输入一个值并且单元格被突出显示后,如果该值被删除,单元格仍然突出显示。是否可以在这些单元格上添加一种验证类型,一旦单元格不再具有值,单元格突出显示将被删除?
  • @pnuts 我试图避免条件格式和内置的 excel 函数。
  • “如果删除了某个值,则单元格将保持突出显示”。是的,您从未另行指定。高光应该什么时候消失?你能用文字描述规则吗?
  • 我已经发布了一个代码变体,如果没有单元格包含值,它会删除突出显示。
  • @TryStudent " 我试图避免条件格式和内置 excel 函数。" ...但是为什么呢?我希望这只是一个学习练习,因为有很多原因,条件格式和 Excel 公式解决方案比 VBA 解决方案要好。
猜你喜欢
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多