Tom*_*ock 21 debugging excel vba compiler-errors excel-vba
这是编译Excel VBA项目时的一个症状.发生以下错误:
User-defined type not defined
但是,编译器不会突出显示产生此错误的代码,因此无法识别问题.
这是一个"用户定义的类型未定义"错误,我之前看到过的简单问题,例如命名As Strig而不是As String.但是,此特定错误仅在Debug > Compile VBAProject菜单选项期间弹出,并且当弹出错误消息框时,它不会突出显示错误发生的代码行.
经过大量的研究后我发现这个bug可能与缺少的引用有关,我已经排除了这个,因为我已经包含了所有需要的引用和Toolbox对象.
为了确保我没有遗漏任何明显的缺失Dim语句,我已添加Option Explicit到所有代码页(包括表单)以确保没有遗漏任何内容.运行编译时仍会显示错误.
还有一个已知的错误,表明由于使用二进制兼容性的VB6项目,已知问题会发生:
关闭二进制兼容性并编译项目.Visual Basic将突出显示包含未定义的用户定义类型的代码行.解决问题后,可以重新打开二进制兼容性.
我通过此问答找到了这篇文章,但是,我在标准Excel VBA编辑器中找不到此选项.
我从Google搜索和其他问题中了解到,我不是唯一一个遇到此问题的人.
我已经尝试过手动完成代码,但实际上有太多行可行.
有没有办法在Excel VBA项目中关闭二进制兼容性?如果人们无法调试他们需要更改的内容,人们如何找到这个有问题的代码行?任何帮助都很可爱!
先感谢您.
编辑: 我找到了令人讨厌的代码行,所以我的特定问题就解决了删除该特定行后问题仍然存在 - 它是在其代码中引用的表单上的mispelt控件名称.这仍然无法解决您如何找到这个有问题的代码的特定问题.当这个错误发生时,我们是否能够找到找到有问题的代码的好方法,以便将来的其他人可以避免这种痛苦?
小智 8
我的解决方案不是好消息,但至少应该有效.
我的情况是:我有一个来自同事的.xlsm.1)我打开它并单击按钮:它工作正常.2)我保存文件,关闭excel,再次打开文件:现在它不再工作了.结论是:代码没问题但是excel无法正确管理引用.(我尝试删除重新添加引用但没有成功)
因此,解决方案是将每个引用的对象声明为Variant并使用CreateObject("Foo.Bar")而不是New Foo.Bar.
例如:
Dim objXML As MSXML2.DOMDocument
Set objXML = New MSXML2.DOMDocument
Run Code Online (Sandbox Code Playgroud)
取而代之:
Dim objXML As Variant
Set objXML = CreateObject("MSXML2.DOMDocument")
Run Code Online (Sandbox Code Playgroud)
由于听起来您已经尝试了许多不同的潜在解决方案,因此您现在可能必须以漫长而有条理的方式进行此操作。
创建一个新的空白工作簿。然后将旧的工作簿逐一复制到其中。添加参考,编写一点代码来测试它。确保它编译,确保它运行。添加一个子程序或函数,再次编写一些测试子程序来运行它,并确保它可以编译。重复此过程,慢慢添加和测试所有内容。
您可以通过首先尝试较大的块来加快速度,然后当您发现触发问题的块时,将其删除并将其分成较小的块进行测试。
要么你会找到罪犯,要么你会得到一本神奇地没有问题的新工作簿。后者可能是由于工作簿文件中某种隐藏的损坏造成的,可能是在二进制 vbproject 部分中。
欢迎来到调试世界,无需调试器或其他有用的工具来为您完成繁重的工作!
| 归档时间: |
|
| 查看次数: |
171699 次 |
| 最近记录: |