【发布时间】:2016-07-19 13:11:40
【问题描述】:
我在一个项目中有一个很大的用户窗体,当它被加载到内存中时会导致一些问题。 Userform_Initialize 事件中没有发生任何奇怪的事情(只是填充组合框并设置默认属性)。
几周前,当用户表单没有那么大(以 KB 为单位)时,一切都运行良好。最初,我认为工作簿已损坏并继续导出每个用户窗体、模块和类,重新导入到新工作簿中,然后像往常一样编译项目。这并没有解决问题。有趣的是,当我将 Stop 放在初始化事件的顶部并逐步执行代码时,一切正常。
主要思想
这让我想到问题的可能原因是用户表单非常大,因此将用户表单加载到内存中的过程比典型的加载时间要长。本质上,vb 编辑器继续执行初始化事件中的代码,尝试访问可能尚未在内存中的控件。
我做了一些粗略的分析,以便很好地了解所讨论的用户表单有多大。用户表单已导出并重新导入空白工作簿。没有用户窗体的工作簿在30 KB 附近,而有用户窗体的工作簿在350 KB 附近,因此我们可以得出用户窗体在320 KB 附近的结论。
请务必注意,我的项目中有大量错误处理,但是,我无法识别此特定错误,因为它发生在初始化事件中(在此特定事件中无法进行错误处理 [Bovey,Professional Excel 开发,第 489 页])。
问题:除了时间延迟(例如 Application.Wait 或 Sleep 通过 Windows API),还有其他方法可以避免崩溃吗?
更新
事实证明,延迟应用程序也不能可靠地工作。我实际上也删除了整个 Initialize 事件也无济于事。我在原始帖子中忘记提及的一件事是我滥用了Debug -->> Compile VBA Project 功能。请参阅下面的答案。
【问题讨论】:
-
您是否尝试过块中的代码,看看您的问题是什么,它可能是组合的触发事件之一,可能会锁定事情。
-
在像 438 这样的崩溃之前,您是否收到错误消息,或者它只是冻结并死亡?
-
@Nathan_Sav,是的,我有。我已经注释了代码的每个子部分,运行了应用程序,但程序仍然在初始化事件时崩溃。
-
@cyboashu,不,我没有收到任何错误,应用程序只是崩溃了。当初始化事件发生错误时,这是一个灾难性错误,因此不会返回任何错误信息。
-
在标准模块中,执行
dim frm as new YourUserForm然后frm.show之类的操作,看看是否收到错误消息?
标签: vba excel crash initialization