当使用下面的代码时,我的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
答案 0 :(得分:0)
感谢Variatus,您100%正确。 假设代码在Sheets(“ Views”)的代码表中,则一旦触发Change事件,它就会通过在工作表上创建的更改而导致Change事件,从而导致一个无限循环,最终可能会以“内存不足”。为避免这种情况,请在进行任何更改之前将Application.EnableEvents = False设置,并在完成所有更改后将属性设置回True。 –昨天
答案 1 :(得分:0)
我还发现在开始时添加以下内容也有帮助,这样,仅当我要更改的特定单元格发生更改(即“国家/地区”选择)时,代码才触发更新。
If Not Application.Intersect(Range("C2"), Range(Target.Address)) Is Nothing Then
'code you want exicuted
End If