excel - 编译抛出 "User-defined type not defined"错误,但不会转到有问题的代码行

标签 excel vba debugging compiler-errors

症状

这是编译Excel VBA 项目时特有的症状。出现以下错误:

未定义用户定义类型

但是,编译器不会突出显示产生此错误的代码,因此我无法识别问题。

我已经知道并尝试过的内容

这是一个“用户定义的类型未定义”错误,我以前见过,它涉及简单的问题,例如将某些内容命名为 As Strig 而不是 As String。但是,此特定错误仅在调试 > 编译 VBAProject 菜单选项期间弹出,并且当弹出错误消息框时,它不会突出显示发生错误的代码行。

经过大量研究,我发现这个错误可能与缺少引用有关,并且我已经排除了这种可能性,因为我已经包含了所有需要的引用和工具箱对象。

为了确保我没有遗漏任何明显缺失的 Dim 语句,我已将 Option Explicit 添加到所有代码页(包括表单)以确保没有遗漏任何内容。运行编译时仍然显示该错误。

There is also this known bug说明由于使用二进制兼容性的 VB6 项目,已知会发生此问题:

Turn off Binary Compatibility and compile the project. Visual Basic will highlight the line of code that contains the User Defined Type that is not defined. After resolving the problem, Binary Compatibility can be turned back on.

我通过这个Question and Answer找到了这篇文章但是,我在标准 Excel VBA 编辑器中找不到此选项。

帮助拯救我和他人的理智!

通过 Google 搜索和其他问题,我知道我并不是唯一遇到此问题的人。

我尝试过手动检查代码,但行数太多,无法执行此操作。

有没有办法关闭 Excel VBA 项目中的二进制兼容性?如果人们无法调试到需要更改的内容,他们如何找到这行有问题的代码?任何帮助都会很高兴!

提前谢谢您。

编辑: 我找到了有问题的代码行,因此我的特定问题得到了解决 删除该特定行后问题仍然存在 - 这是一个拼写错误的控件代码中引用的表单上的名称。这仍然不能解决您如何找到此违规代码的特定问题。当这个错误发生时,我们是否能够找到一种好方法来找到有问题的代码,以便其他人将来可以避免这种痛苦?

最佳答案

我的解决方案不是好消息,但至少应该有效。

我的情况是:我有一个来自同事的 .xlsm。 1)我打开它并单击按钮:它工作正常。 2)我保存文件,关闭Excel,再次打开文件:现在它不再起作用了。结论是:代码没问题,但excel无法正确管理引用。 (我尝试删除重新添加引用,但没有成功)

因此,解决方案是将每个引用的对象声明为 Variant 并使用 CreateObject("Foo.Bar") 而不是 New Foo.Bar >.

例如:

Dim objXML As MSXML2.DOMDocument
Set objXML = New MSXML2.DOMDocument

替换为:

Dim objXML As Variant
Set objXML = CreateObject("MSXML2.DOMDocument")

关于excel - 编译抛出 "User-defined type not defined"错误,但不会转到有问题的代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19680402/

相关文章:

visual-studio - OpenCL 堆栈溢出。怎么解决呢?

python - 在 ubuntu 中嵌入 python 时出现段错误

excel - Excel "save"文件如何通过 HTTP?

Excel VBA : Move items from one array to another array

excel - 如果单元格的值等于另一列的任何值,则对单元格进行条件格式设置

c# - 如何在 Visual Studio 中调试没有断点的 C#?

excel - Excel 中的 VLOOKUP 问题

python - 合并或连接数百个 Excel 文件

excel - Excel 中的实时图表 : for future dates, 行降至零

sql - 根据 Excel 用户表单下拉组合框中选定的月份创建 SQL 查询