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

我正在使用这个:

Worksheet_Change(ByVal Target As Range) 

为了几个目的来运行我的代码中的一部分。 现在我想要做同样的事情,但只有在某个范围内的值被改变时才能运行。 我尝试了以下,但它不起作用:

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

代码逐个检查一个单元格列表,每个单元格的值将变成绿色,每个空单元格将变成红色。 当你一个接一个的时候,你不需要select单元格,但是由于有大量的单元格需要着色,我正在循环这部分,以防止我的代码变得非常长。

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

  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 

使用Target范围。 如果某个值同时在多个单元格中更改(例如使用Ctrl + Enter),ActiveCell将不会提供正确的结果。

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

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