For Loop in Worksheet 更改故障

Posted

技术标签:

【中文标题】For Loop in Worksheet 更改故障【英文标题】:For Loop in Worksheet change malfunction 【发布时间】:2021-12-05 08:34:18 【问题描述】:

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

 

【问题讨论】:

您正在循环遍历所有行,因此它自然会影响所有行。此外,您需要在第一个 If 块中禁用事件。 此外,我建议您对 for-loop 和 If- 语句使用正确的缩进 - 这样更容易阅读正在发生的事情。 当一个单元格改变时你启动你的事件,并且在那个事件中你改变了单元格。你不是在创建一些无限循环的事件,像这样称呼自己吗? @Rory 代码有效,但我遇到的问题是,一旦我将行从“完整”更改为“部分”,它会影响所有单元格,而不仅仅是我更改的那个。尝试了几件事来改变这一点,但无济于事。谢谢 @Dominique 请问你建议我怎么做?当我将一个单元格从“完整”更改为“部分”时,它会影响所有以前的单元格,而不仅仅是我更改的那个 【参考方案1】:

您似乎需要为 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

(并删除其他出现)。

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

【讨论】:

使用 ``` If Target.Column 非常感谢@Dominique。根据您的见解对代码进行了一些重构,现在运行良好

以上是关于For Loop in Worksheet 更改故障的主要内容,如果未能解决你的问题,请参考以下文章

oracle存储过程for in loop的问题

javascript 使用knex in for loop err

swift [语言:Swift,语法:for-in-loop]

Python for-in Loop常见遍历方法

oracle查询表用for in loop循环出来更新

pl sql cursor for loop in