请我有一个问题,每次在工作表上发生变化,它会影响所有行,而不是行(I)有关。困惑。不for循环工作为worksheet_change ?请帮助。谢谢。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LR As Long
'create a variable for last row of column C, LR
LR = Cells(Rows.Count, "C").End(xlUp).Row
For i = 2 To LR
If Cells(i, 6) = "Yes" And Cells(i, 7).Value = "Full" Then
Target.Value = Cells(i, 3).Value
Cells(i, 9).ClearContents
Cells(i, 10).Value = Cells(i, 8).Value + Cells(i, 9).Value
End If
If Not Intersect(Target, Range("G" & i & ":G" & LR)) Is Nothing And Range("F" & i) = "Yes"
And Target.Value = "Full" Then
Application.EnableEvents = False
Cells(i, 8).Value = Cells(i, 3).Value
Cells(i, 9).ClearContents
Cells(i, 10).Value = Cells(i, 8).Value + Cells(i, 9).Value
Application.EnableEvents = True
End If
If Not Intersect(Target, Range("G" & i & ":G" & LR)) Is Nothing And Range("F" & i) = "Yes" And
Target.Value = "Portion" Then
Application.EnableEvents = False
Cells(i, 8).Value = Cells(i, 3).Value
Cells(i, 10).Value = Cells(i, 8).Value + Cells(i, 9).Value
Application.EnableEvents = True
End If
Next i
End Sub
似乎需要为列A-E启动此事件。所以,你可以用:
开始宏IF Target.Column <= 5 THEN
...
END IF 'at the end of your macro
像这样,当你启动像Cells(i, 8).Value = ...
,Cells(i, 10).Value = ...
,…这个宏将被调用,但它将立即停止。
显然,您正在检查列,最大10,这是在您的宏中更改的单元格的范围内。让我们用另一种方法:
在宏的最开始,放入这一行:
Application.EnableEvents = False
在宏的最后,放入这一行:
Application.EnableEvents = True
(并删除其他出现项)。
这将确保您在运行宏时不会调用宏。