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 更改故障的主要内容,如果未能解决你的问题,请参考以下文章
javascript 使用knex in for loop err