vba溢出堆棧空間怎么解決?
vba溢出堆棧空間第一種解決辦法是用enableEvents來控制事件的響應。
第二種方法是獲得更多的可以使用的本地變量空間,甚至需要進行硬件的升級,在這之前不要忘了備份。
堆棧是內存的一個工作區,會隨著程序運行的需要而增長或縮小。此錯誤有以下的原因和解決方法:
有太多活動的Function、Sub或Property過程調用。檢查過程的嵌套是否太深,尤其是遞歸過程,即自己調用自己的過程。確保遞歸能終止,使用“調用”對話框來查看活動的過程 (在堆棧上)。
本地變量需要更多可用的本地變量空間。
試著在模塊級別中聲明某些變量。可以在靜態過程,即在Property、Sub或Function關鍵字前加上Static,聲明所有變量,或可以在過程內使用Static語句來聲明各個Static變量。
有太多定長字符串。
定長字符串在過程中可快速訪問,比可變長度字符串使用更多堆棧空間,因為字符串數據本身要放在堆棧上。可試著重新定義一些定長字符串成為變長字符串。當聲明一變長字符串時,只有字符串描述符 (非數據本身) 會放在堆棧上。可以在沒有堆棧空間的模塊層次上定義字符串。在模塊層次申明變量是缺省為Public,所以在模塊上所有過程皆可見到字符串。
DoEvents函數調用的嵌套太多。
利用“調用”對話框,在堆棧上查看正在活動的過程。
代碼引起了事件層疊。
所謂事件層疊就是引起一個事件,此事件會調用已在堆棧上的事件過程。事件層疊和不能中止的遞歸過程調用是相似的,但不太明顯,因為是由 Visual Basic 所調用,而不是在代碼中調用。使用“調用”對話框來查看那些正在活動的過程 (在堆棧上)。
顯示“調用”對話框,在“調試”窗口中選取過程框右邊的“調用”按鈕或選擇“調用”命令。詳細信息,可選取有問題的項目,并按下 F1 (在Windows中)或HELP(在Macintosh中)鍵。