【问题标题】:Excel VBA "out of stack space" errorExcel VBA“堆栈空间不足”错误
【发布时间】:2017-11-14 20:29:47
【问题描述】:
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 代码时遇到了问题。会弹出一个消息框,说有一个

“堆栈空间不足”

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

“对象‘范围’的方法‘值’失败”

我不知道出了什么问题...非常感谢您的帮助。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    问题是您正在更改更改事件中的单元格,这将再次触发该事件,一次又一次......

    您需要暂时禁用事件:

    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
    

    【讨论】:

    • 附注:我建议不要使用Integer,始终使用Long。如果rgn 的范围发生变化,您很容易遇到溢出。阅读here 为什么使用Long 而不是Integer 总是一个好主意。
    • 非常感谢!它完全解决了我的问题,也感谢您的解释和阐述!它们真的很有用!
    猜你喜欢
    • 2018-08-07
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多