首页 > 解决方案 > For Loop in Worksheet 更改故障

问题描述

请我有一个问题,每次在工作表上发生更改时,它都会影响所有行而不是相关的行 (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

 

标签: excelvbaloopsfor-loopworksheet

解决方案


看来您需要为 AE 列启动此事件。因此,您可以使用以下命令开始您的宏:

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

(并删除其他事件)。

这将确保您在运行宏时不会调用它。


推荐阅读