我有一個大型的用戶窗體,當它被加載到內存時會引起一些問題。在Userform_Initialize
事件中沒有任何異國情況發生(只需填充組合框並設置默認屬性)。 幾周前,當用戶表單不夠大(以KB爲單位)時,一切正常。最初,我認爲工作簿已損壞,並繼續導出每個用戶窗體,模塊和類,重新導入到新的工作簿中,然後按照以往的方式編譯項目。這並沒有解決這個問題。有趣的是,當我把一個Stop
放在initialize事件的頂部,並且遍歷代碼時,一切正常。Excel VBA項目在編譯後崩潰
重要思想
這讓我思考這個問題的可能原因是,用戶窗體是非常大的,因此正在採取比典型的更長的加載用戶窗體到內存中的進程加載。實質上,vb編輯器正在繼續執行初始化事件中的代碼,試圖訪問可能尚未存儲在內存中的控件。
我已經做了一些粗略的分析,以獲得一個相當好的想法,有多大的用戶表單是有問題的。用戶窗體被導出並重新導入到空白工作簿中。沒有用戶表單的工作簿大約在30 KB
,用戶窗體的工作簿超過了350 KB
,因此我們可以得出結論,用戶窗體大約在320 KB
。
重要的是要指出,我在我的項目中有廣泛的錯誤處理,但是,我無法識別這個特定的錯誤,因爲它發生在初始化事件中(錯誤處理在這個特殊事件中是不可能的[Bovey,專業Excel開發,第489頁])。
問題:具有時間延遲(例如,經由Windows API的Application.Wait
或Sleep
)之外,有另一種方法來避免崩潰?
UPDATE
事實證明,延遲申請沒有可靠的工作之一。我實際上刪除了整個Initialize事件也無濟於事。我在原帖中忘記提到的一件事是,我濫用了Debug -->> Compile VBA Project
功能。請參閱下面的答案。
你是否試過了代碼塊,看看你的問題是,它可能是一個組合的觸發器事件,可能會鎖定的事情。 –
你有沒有得到一個錯誤消息,像438崩潰之前,或者它只是凍結和死亡? – cyboashu
@Nathan_Sav,是的,我有。我已經評論了代碼的每個子部分,運行了應用程序,並且程序在初始化事件中仍然崩潰。 –