我有一个大型的用户窗体,当它被加载到内存时会引起一些问题。在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,是的,我有。我已经评论了代码的每个子部分,运行了应用程序,并且程序在初始化事件中仍然崩溃。 –