首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工作表中的For循环更改故障

工作表中的For循环更改故障
EN

Stack Overflow用户
提问于 2021-10-18 09:10:44
回答 1查看 55关注 0票数 0

我有一个问题,每次在工作表上发生更改时,它会影响所有行,而不是相关的行(i)。迷惑了。for循环对worksheet_change不起作用吗?请帮帮忙。谢谢。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 08:01:57

您似乎需要为A-E列启动此事件。所以,你可以这样开始你的宏:

代码语言:javascript
复制
IF Target.Column <= 5 THEN
...
END IF 'at the end of your macro

就像这样,当你启动像Cells(i, 8).Value = ...Cells(i, 10).Value = ...,...此宏将被调用,但它将立即停止。

显然,您正在检查列,最大值为10,它位于您在宏中更改的单元格范围内。让我们使用另一种方法:

在宏的最开始处,放入下面一行:

代码语言:javascript
复制
Application.EnableEvents = False

在宏的最末尾,放入下面一行:

代码语言:javascript
复制
Application.EnableEvents = True

(并删除其他实例)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69613500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档