【问题标题】:On Cell Change program suddenly stopped working VBAOn Cell Change 程序突然停止工作 VBA
【发布时间】:2021-05-14 21:10:00
【问题描述】:

编辑:使这种方式更简单。 Edit2:将 Target.Application 更改为 Application

以下代码应检测 A 列中任何单元格的变化,并将 B 列中相邻单元格的值更改为“成功”。

这行得通,但现在不行了。

Sub Worksheet_Change(ByVal Target As Range)

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    If Not Intersect(ActiveCell, Range("A:A")) Is Nothing Then
        ActiveCell.Offset(0, 1).Value = "Success"

    End If

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

End Sub


【问题讨论】:

  • 可能需要一个错误处理程序来确保.EnableEvents = True 始终执行,无论是否出现错误。
  • 有一定数量的 ActiveSheet 引用和对 Range/Cells 的调用,但没有附加合格的工作表对象。解决当前问题后,您还应该考虑修复这些问题,否则您的代码很可能仍然容易出错。
  • @TimWilliams 谢谢!我希望有人能提出这样的建议。
  • 您设置为 false With Target.Application 并将 With Application 设置为 true。你是故意的吗?
  • @Toni 不,我正在研究我在堆栈交换上读到的东西。我只是在尽我所能,真的,看看它是否会有所作为。我会换回来的。

标签: vba onchange


【解决方案1】:

应该看起来更像这样:

Sub Worksheet_Change(ByVal Target As Range)
    
    Dim rng As Range, c As Range
    
    Set rng = Application.Intersect(Target, Me.Range("A:A"))
    
    If Not rng Is Nothing Then
        On Error GoTo haveError 'turn on error handling
        Application.EnableEvents = False
        For Each c In rng.Cells 'need to handle a multi-cell update
            c.Offset(0, 1).Value = "Success"
        Next c
        Application.EnableEvents = True
    End If

    Exit Sub 'normal exit

haveError:
    MsgBox Err.Description
    Application.EnableEvents = True 'ensure events aren't left turned off
    
End Sub

【讨论】:

  • 谢谢!不幸的是,这似乎仍然没有做任何事情!我很困惑——这段代码不久前还可以正常工作。
  • 为我工作。你在工作表代码模块里有,并且开启了事件?
猜你喜欢
  • 2016-07-18
  • 2019-10-06
  • 2019-10-15
  • 2017-08-22
  • 2021-02-01
  • 2016-12-29
  • 2018-05-09
  • 2015-12-07
相关资源
最近更新 更多