2017-06-13 103 views
2
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim b As Integer 
    b = 0 

    Dim cell As Range 
    Dim rgn As Range 

    Set rgn = Range("f2:f200") 

    For Each cell In rgn 
     If IsEmpty(cell) = False Then 
      b = b + 1 
     End If 
    Next 

    Range("d2").Value = b 
End Sub 

嗨,我在试图运行以下Excel VBA代码片时遇到了问题。一个消息框弹出,说有一个Excel VBA“堆栈空间不足”错误

“的堆栈空间”

问题行Set rgn = range("f2:f200"),然后另一个消息框会弹出并说

“对象'范围'的方法'值'失败“

我不知道什么是错......非常感谢您的帮助。

回答

4

的问题是,你正在改变细胞的变化事件,这将再次触发事件,又一次,又一次......

您需要暂时禁用事件:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim b As Integer 
    b = 0 

    Dim cell As Range 
    Dim rgn As Range 

    Set rgn = Range("f2:f200") 

    For Each cell In rgn 
     If IsEmpty(cell) = False Then 
      b = b + 1 
     End If 
    Next 
    Application.Enableevents = False 
    Range("d2").Value = b 
    Application.Enableevents = True 
End Sub 
+0

由于一个边注:我建议不要使用'Integer',并始终使用'Long'。如果范围'rgn'发生变化,您将很容易发生溢出。阅读[这里](https://stackoverflow.com/a/26409520/3219613)为什么使用'Long'而不是'Integer'总是一个好主意。 –

+0

非常感谢!它完全解决了我的问题,并感谢您的解释和阐述!他们真的很有用! –

相关问题