【问题标题】:Out of Stack Space when excel is refreshed刷新excel时堆栈空间不足
【发布时间】:2015-03-31 12:30:09
【问题描述】:
'Private Sub Worksheet_Calculate()
'
'    If IsError(Range("ValTest1").Value) Then
'            Sheets("Market Books (2)").Select
'            Range("HistoricalData").Select
'            Selection.ClearContents
'    else
'       call macro12
'    End If
'
'End Sub

我在一张 VBA 中运行下面的代码。我正在退出堆栈消息。由于 API 连接,屏幕每 2 秒更新一次。所以它会每2秒触发一次代码。当 API 返回错误值时,您能否帮我清除内容?如果API返回值,我想触发其他一些宏(macro12)

【问题讨论】:

  • link 到“Out of Stack”的一些原因

标签: vba excel stack stack-overflow


【解决方案1】:

您可能正在创建多个 Calculate 事件:

Private Sub Worksheet_Calculate()
Application.EnableEvents = False

    If IsError(Range("ValTest1").Value) Then
            Sheets("Market Books (2)").Select
            Range("HistoricalData").Select
            Selection.ClearContents
    Else
       Call macro12
    End If

Application.EnableEvents = True
End Sub

在处理期间禁用事件。

【讨论】:

    【解决方案2】:
    Private Sub Worksheet_Calculate()
    
        If IsError(Range("ValTest1").Value) Then
                Sheets("Market Books (2)").Select
                Range("HistoricalData").Select
    
                Call SelectNewCell
    
        Else
            Call Macro12
    
        End If
    
    End Sub
    

    基本上 SelectNewCell() 解决了这个问题。一定是卸载了这么多重复选择造成的内存空间

    我将 SelectNewCell() 放在同一张表中

    Private Sub Worksheet_Activate()
        Me.ScrollArea = "A1:M34"
    End Sub
    

    【讨论】:

    • 栈是设置函数的连续内存地址空间。它包含返回地址、传递给它的参数和局部变量。每个属性或方法调用都是下面的一个函数。它从 1 mb 开始并自动增长,直到遇到一些正在使用的内存 - 然后它就无法增长。嵌套函数按调用顺序在堆栈上。如果太深,递归函数会填满堆栈。
    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多