更改某个范围内的单元格时运行宏

时间:2015-11-05 09:45:28

标签: excel vba

我正在使用它:

    Worksheet_Change(ByVal Target As Range)

出于多种目的从我的代码运行部件。现在我想做同样的事情但只在某个范围内的值发生变化时才运行它。我尝试了以下方法,但它不起作用:

    Worksheet_Change(ByVal Target As Range("C5:H5"))

代码逐个检查单元格列表,每个具有值的单元格将变为绿色,每个空单元格将变为红色。一个接一个地执行此操作时,您不需要选择单元格,但由于要着色的单元格数量很多,我将循环此部分以防止我的代码变得非常长。

通过仅在更改特定范围内的单元格时运行代码,Excel表格中的用户仍然可以编辑工作表的其他部分,而无需在每次输入后更改所选单元格。

    Private Sub Worksheet_Change(ByVal Target As Range)


    Sheets("MainSheet").Range("C5").Select
    Do While ActiveCell.Offset(-1, 0) <> ""
        If ActiveCell.Value = "" Then
           ActiveCell.Offset(-1, 0).Interior.Color = RGB(255, 0, 0)
                Else: ActiveCell.Offset(-1, 0).Interior.Color = RGB(0, 255, 0)
        End If
        ActiveCell.Offset(0, 1).Select
    Loop


    End Sub

2 个答案:

答案 0 :(得分:1)

使用Target范围。如果一次更改多个单元格中的值,则ActiveCell将无法提供正确的结果(例如,使用Ctrl + Enter)。

Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C5:H5")) Is Nothing Then
    MsgBox "Change in " & Target.Address
End If

答案 1 :(得分:0)

<强> Sollution

在运行您要执行的操作之前,请存储活动单元格

'store currently active cell
Set myActiveCell = ActiveCell
Set myActiveWorksheet = ActiveSheet
Set myActiveWorkbook = ActiveWorkbook

Sheets("MainSheet").Select
Range("C5").Select
j = 0

Do While j < 6
    If ActiveCell.Offset(0, j).Value = "" Then
        ActiveCell.Offset(-1, j).Interior.Color = RGB(255, 0, 0)
            Else: ActiveCell.Offset(-1, j).Interior.Color = RGB(0, 255, 0)
    End If
    j = j + 1
Loop

'go back to previously active cell
    myActiveWorkbook.Activate
    myActiveWorksheet.Activate
    myActiveCell.Activate