我已经跟踪这个问题好几天了,所以我想我会在这里发布它以帮助其他人解决同样的问题,并了解更多关于原因的信息。在这篇文章的末尾,我将问题代码简化为两个类模块。
基本上,简化的场景是这样的:两个类模块,Parent 和 Child,其中 Child 实现了 Parent。Parent 中的某处是 line TypeOf Me Is Child,其中Me可以是任何对象。
根据我的理解,当该TypeOf...Is行被编译为 P 代码(调试 > 编译,或调用方法)并保存到文件(.xlsm 或 .xlsb)时,它会导致文件无法正常打开。代码将运行良好,但是当文件被保存、关闭和重新打开时,它在打开(或打开 VBE)时出现错误,说Invalid data format或Error accessing file. Network connection may have been lost,并且无法再打开父模块,也不能运行任何 VBA (?1=1在立即窗口中尝试,它给出了相同的错误)。
如果使用TypeName()而不是检查类型TypeOf...Is,则不会出现此问题(这是我在项目中使用的解决方案)。
任何人都可以更清楚地了解这里到底出了什么问题,或者至少确认我在导致问题的原因(P代码)方面走在正确的轨道上?
PS 是的,我知道父母对孩子的了解是糟糕的设计,但我已接近一次性项目的尾声,不值得花时间重新设计。
有用的链接:
类模块:
家长:
Option Explicit
' Class: Parent
' The problem (so far as I can tell):
' When the compiled version of the …Run Code Online (Sandbox Code Playgroud)