【问题标题】:VBA user defined type not defined (only sometimes)VBA 用户定义类型未定义(仅有时)
【发布时间】:2016-08-24 17:33:14
【问题描述】:

在我的 Excel 工作簿中有时我收到以下错误:

vba 用户定义类型未定义

我知道这通常意味着代码中有某些类型 excel(VBA) 不知道。

奇怪的是代码运行得非常好,而且编译时不会发生这种情况。

此错误有时会在 Application.Calculate 系列的所有方法和 F9 按键上随机发生。 不总是但有时。

同样的行为有一个带有此描述的 vbe 错误消息:

visual basic 模块包含语法错误

当我单击调试时,它会出现在 application.calculate(full) 上,如果我继续代码(使用 F5),它会继续运行而不会出现错误。

编辑: 有时当我将此函数复制到另一个工作簿时,它会受到用户定义类型错误的影响:

Option Explicit

Public Function MergeAreaValue(rng As Range) As String
On Error Resume Next

If rng.MergeCells = True Then
    MergeAreaValue = rng.MergeArea.Cells(1).Value2
Else
    MergeAreaValue = rng.Value2
End If

End Function

函数从合并区域获取值。

编辑2: 我的用户定义类型错误总是在计算时发生,但不会破坏它。工作簿仍然计算正常..消息很烦人。

【问题讨论】:

  • 违规类型是在你自己的代码中定义的,还是在库中定义的?如果是后者,您是否检查过它是否包含在工具/参考中?
  • 好吧,我应该注意这个错误并不指向我的声明。 (就像我认为应该做的那样) Workbook 包含相当多的代码。但唯一(非标准)外部引用是 Microsoft Scripting Runtime。和微软 XML
  • 你是否碰巧有类似的变量在其他地方是公开的?
  • @DougCoats 我刚刚资助了一个与此错误相关的程序。将在几秒钟内更新主要问题
  • 你是否在每个模块的顶部使用Option Explicit,你的VBA代码编译成功了吗?

标签: vba excel


【解决方案1】:

我觉得 "sometimes" 是关键字。尝试反编译文件。以this 为例。

多年来我使用它没有任何问题,但只有好处:) Excel 没有内部反编译器,如 Access /decompile。 不要忘记自己备份,而不仅仅是工具:) .

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2017-10-30
    • 2014-08-07
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多