堆疊是記憶體的一個工作區,會隨著程式運行的需要而增長或縮小。此錯誤有以下的原因和解決方法:
1、有太多活動的 Function、Sub 或 Property 過程調用。
檢查過程的嵌套是否太深,尤其是遞歸過程,即自己調用自己的過程。確保遞歸能終止,使用 “調用” 對話框來查看活動的過程 (在堆疊上)。
2、本地變數需要更多可用的本地變數空間。
試著在模組級別中聲明某些變數。可以在靜態過程,即在 Property、Sub 或 Function 關鍵字前加上 Static,聲明所有變數,或可以在過程內使用 Static 語句來聲明各個 Static 變數。
3、有太多定長字元串。
定長字元串在過程中可快速訪問,比可變長度字元串使用更多堆疊空間,因為字元串數據本身要放在堆疊上。可試著重新定義一些定長字元串成為變長字元串。當聲明一變長字元串時,只有字元串描述符 (非數據本身) 會放在堆疊上。可以在沒有堆疊空間的模組層次上定義字元串。在模組層次申明變數是預設為 Public,所以在模組上所有過程皆可見到字元串。
4、DoEvents 函式調用的嵌套太多。
利用“調用” 對話框,在堆疊上查看正在活動的過程。
5、代碼引起了事件層疊。
所謂事件層疊就是引起一個事件,此事件會調用已在堆疊上的事件過程。事件層疊和不能中止的遞歸過程調用是相似的,但不太明顯,因為是由 Visual Basic 所調用,而不是在代碼中調用。使用“調用” 對話框來查看那些正在活動的過程 (在堆疊上)。
顯示“調用” 對話框,在“調試” 視窗中選取過程框右邊的“調用”按鈕或選擇“調用” 命令。詳細信息,可選取有問題的項目,並按下 F1 鍵。