当使用下面的代码时,我的excel冻结,没有错误(我必须暂停代码并结束,以允许再次使用excel。-奇怪的是,我可以单独运行每个更新,它会工作得很好。但当它们全部激活时,它就会停止工作。
有什么建议吗?
Private Sub Worksheet_Change(ByVal Target As Range)
With ThisWorkbook
Dim Country As String
Country = .Sheets("Views").Range("C2").Text
Select Case Country
Case Is = "Australia"
.Sheets("Views").Range("C5").Formula = "=Volume!B7+Volume!H7+Volume!N7+Volume!T7+Volume!Z7+Volume!AF7"
.Sheets("Views").Range("C6").Formula = "=Volume!C7+Volume!I7+Volume!O7+Volume!U7+Volume!AA7+Volume!AG7"
.Sheets("Views").Range("C7").Formula = "=Volume!D7+Volume!J7+Volume!P7+Volume!V7+Volume!AB7+Volume!AH7"
.Sheets("Views").Range("C8").Formula = "=Volume!E7+Volume!K7+Volume!Q7+Volume!W7+Volume!AC7+Volume!AF7"
Case Is = "China"
'do china
End Select
End With
End Sub
发布于 2019-03-08 08:06:06
感谢Variatus,你是100%正确的。假设代码在工作表(“视图”)的代码表中,一旦触发了更改事件,它将通过在工作表上创建的更改来引发更改事件,从而导致无限循环,最终可能会以“内存不足”结束。要避免这种情况,请在进行任何更改之前设置Application.EnableEvents = False,并在完成所有更改后将该属性设置回True。-昨天
发布于 2019-03-08 08:11:49
我还发现在开头添加以下内容也很有帮助,这样代码只会在我想要更改的特定单元格(即国家/地区选择)发生变化时触发更新
If Not Application.Intersect(Range("C2"), Range(Target.Address)) Is Nothing Then
'code you want exicuted
End If
https://stackoverflow.com/questions/55037194
复制相似问题