【问题标题】:Worksheet Change Event Stuck in Infinite Loop工作表更改事件陷入无限循环
【发布时间】:2018-08-23 13:26:51
【问题描述】:

我希望以下代码执行以下操作:

  • 在我在特定列中输入值后,计算一些内容并使用这些计算值分配单元格值

问题:

  • 在我为另一个单元格赋值后,Worksheet.Change 事件将再次触发,这会重新启动子单元并导致无限循环

如何更改我的代码,使其不会陷入无限循环,并且每当我向正在使用的列添加值时,我想要更新的单元格将自动更新?

代码 - 我要添加值的列是 C 列:

Public Sub Worksheet_Change(ByVal Target As Range)
    Dim xlApp As Application
    Dim ws As Worksheet
    Dim r As Range
    Dim size As Long

    Set xlApp = Excel.Application
    Set ws = xlApp.ThisWorkbook.Worksheets("Sheet1")

    'get length of this individual column
    Set r = ws.Range(ws.Cells(2, 3), ws.Cells(ws.Rows.Count, 3).End(xlUp))
    'test to see if I got the correct column: i do
    r.Select
    size = r.Count

    With xlApp.WorksheetFunction
        'test to see if the offset I got was correct: it is
        r.Offset(0, 1).Select
        'get average of big range
        ws.Cells(3, 10).Value = .Average(r.Offset(0, 1)) ' <- here is where the change event will fire again
                                                         '    presumably because i just changed a value.
        'get standard deviation of big range's population
        ws.Cells(3, 11).Value = .StDev_P(r.Offset(0, 1))
        'test to see if the offset i got was correct: it is
        r.Offset(0, 2).Select
        ws.Cells(3, 12).Value = .Average(r.Offset(0, 2))
        ws.Cells(3, 13).Value = .StDev_P(r.Offset(0, 2))
    End With

    Set xlApp = Nothing
    Set ws = Nothing
    Set r = Nothing
End Sub

感谢阅读!

【问题讨论】:

  • 在更新值之前设置Application.EnableEvents = False,然后在完成后将它们重新打开 ` = True`

标签: vba excel


【解决方案1】:

在对工作表进行任何更改之前禁用Events。如果没有 Events 禁用,您对工作表所做的每一次更改都会[重新]-激活宏并循环您的系统,直到您的 excel 实例崩溃...

Application.EnableEvents = False
    'Changes go here
Application.EnableEvents = True

【讨论】:

  • 感谢您的帮助; 6 分钟后我会接受你的回答。
猜你喜欢
  • 2020-05-13
  • 2018-09-02
  • 1970-01-01
  • 2013-03-17
  • 2021-02-15
  • 2022-01-23
相关资源
最近更新 更多