【问题标题】:Access 2007 RunTime Error 13 Type MismatchAccess 2007 运行时错误 13 类型不匹配
【发布时间】:2020-07-13 18:35:42
【问题描述】:

我正在创建的数据库中使用以下代码行。

Dim yr As String

yr = Format(Date, "yy")

这行代码是从另一个运行良好的数据库中复制而来的。但是,在这个新数据库中,格式行会引发错误 - 运行时错误 13:类型不匹配。我看不出是什么问题。

【问题讨论】:

  • 您是否有可能在代码的其他地方重新定义了符号Date?如果在评估 Format 行之前调用 Debug.Print Date 会返回什么?
  • @LeeMac 据我所知,您无法重新定义Date。 VBA 不支持任何类型的重载/重新定义。不过,我不知道发生了什么。
  • @ErikvonAsmuth 谢谢 - 我可能应该在断言之前进行测试。我知道可以重新定义诸如Val 之类的函数(我发现很难),因此对Date 做了同样的假设。
  • 主要区别在于Date不仅是一个函数,也是一个核心数据类型,所以如果你尝试调用任何日期,它会产生很多更多的编译错误.对于函数,你确实有上下文,你可以在不同的上下文中声明它们。 Val 的完全限定名称是 VBA.Val,您可以在不同的上下文中重新声明它。
  • 我唯一能想到的是@LeeMac 实际上一直都是正确的,但不是Date,而是Format 在当前上下文中声明。尝试使用全名:yr = VBA.Format(Date, "yy")

标签: ms-access vba


【解决方案1】:

就像 Lee Mac 所说,在 VBA 中,函数可以在不同的上下文中重新声明。这些不同的函数可以有不同的输入参数和不同的返回值。如果任一参数的类型错误,或者返回错误类型的参数,这可能会导致类型不匹配。此外,这可能会导致意外行为。

在你分享的代码中唯一可以重新声明的函数是Format函数,因为Date也是一种数据类型,你不能从VBA声明一个与数据类型同名的函数.

您可以通过使用库和函数名称来解决这个问题:

yr = VBA.Format(Date, "yy")

或者,更具体地说,您可以使用函数的库、类和名称(没有必要,因为 VBA 库只包含一个 Format 函数):

yr = VBA.Strings.Format(Date, "yy")

您可以使用对象浏览器 (F2) 找到函数的全名以及任何可能的冲突。输入 Format 将显示 VBA.Format,并且可能还会显示另一个具有该名称的公共函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多