VBA - 一遍又一遍地触发Worksheet_Calculate事件

时间:2017-10-17 05:17:18

标签: excel vba

我尝试使用以下代码在每次参考列更改时使用另一个参考列(G8:G508)的内容更新列(E8:E508):

Private Sub Worksheet_Calculate()
Dim Rng As Range
Set Rng = Range("G8:G503")
If Not Intersect(Rng, Range("G8:G503")) Is Nothing Then
Range("E8:E503") = Range("G8:G503").Value
End If
End Sub

代码按预期工作,但似乎一遍又一遍地运行并最终导致Excel崩溃。任何人都可以提供帮助 - 提前谢谢!

2 个答案:

答案 0 :(得分:1)

Range("E8:E503") = Range("G8:G503").Value 

触发另一个计算,触发事件处理程序等等。

为防止无休止的循环,您需要在执行此操作之前暂时禁用事件(然后重新启用)

Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
    Range("E8:E503").Value = Range("G8:G503").Value
    Application.EnableEvents = True
End Sub

答案 1 :(得分:0)

试试这个

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    Dim Rng As Range
    Set Rng = Range("G8:G503")

    If Not Intersect(Rng, Target) Is Nothing Then
        Range("E8:E503") = Rng.Value
    End If

    Application.EnableEvents = True
End Sub