Excel VBA背景范围onChange事件

时间:2018-11-21 10:53:22

标签: excel vba excel-vba

试图使Excel VBA事件在输入范围内的值时将触发。

因此,列A到列AS的范围。如果我在A2列中输入一个值,它将填充背景颜色索引到范围(A2:AS2)。

以下代码针对所有行和列触发。请帮忙。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Value <> "" Then
        currentRow = Target.Row
        ActiveSheet.Range("A" & curRow & ":AS" & curRow).Interior.ColorIndex = 15
            'Target.Interior.ColorIndex = 15
    End If
End Sub

1 个答案:

答案 0 :(得分:1)

使用相交检查Target范围是否在所需范围内,例如A列

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        If Target.Value <> "" Then
            curRow = Target.Row
            Target.Parent.Range("A" & curRow & ":AS" & curRow).Interior.ColorIndex = 15
                'Target.Interior.ColorIndex = 15
        End If
    End If
End Sub

避免使用ActiveSheet,而应使用Target.Parent。 ActiveSheet可以是其他工作表,不一定是目标所在的工作表。

或者使用Target.Resize

Target.Resize(ColumnSize:=45).Interior.ColorIndex = 15  

所以您最终得到:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        If Target.Value <> "" Then
            Target.Resize(ColumnSize:=45).Interior.ColorIndex = 15
        End If
    End If
End Sub