我正在使用它:
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
答案 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