vba 格式函数抛出类型不匹配错误

Posted

技术标签:

【中文标题】vba 格式函数抛出类型不匹配错误【英文标题】:vba format function throws type mismatch error 【发布时间】:2010-09-14 14:40:25 【问题描述】:

我正在尝试在 Access VBA 中将数字格式化为货币。

在即时窗口中,当我输入时:

? Format(123, "Currency")

我得到了预期的响应:“$123.00”

但是,在代码窗口中,当我输入:

Debug.Print Format(123, "Currency")

我收到指向该行的错误:“运行时错误'13':类型不匹配”

为什么同样的简单代码在即时窗口运行,但从代码窗口运行时抛出错误?

【问题讨论】:

【参考方案1】:

我不明白为什么您的第二个示例会导致错误。以下子例程在我的 Access 2003 系统上编译和运行没有错误:

Public Sub test_Format()
    Debug.Print Format(123, "Currency")
End Sub

在新数据库中尝试该子例程。也许您当前的数据库已损坏。

查看 Tony Toews 的Corrupt Microsoft Access MDBs FAQ

【讨论】:

我在一个新的数据库中尝试过,它成功了。如何确定我的数据库是否已损坏?其他代码正常执行。 访问我添加的链接以获取详细的背景信息。首先,我会制作数据库的备份副本。然后尝试 Compact & Repair ... 如果问题消失,您就知道它已损坏。如果 Compact & Repair 不能解决您的问题,您可以尝试反编译。但我想我可能会将您想要保留的所有内容从旧数据库中导入到新的数据库中。 还要在 VBE 编辑器中检查项目的引用。缺少/损坏的引用会发生奇怪的事情,尽管您的问题并不是我以前注意到的真正症状。检查不会有什么坏处。 如果过程或宏使用保留字命名,也会发生奇怪的事情。 我会在导入新数据库之前反编译。导入时会丢失各种东西,例如对象历史记录、启动设置和任何自定义属性。其中第一个永远无法恢复,而后两个必须从头开始重新创建。如果反编译不起作用,我仍然会在启动新数据库之前尝试使用 SaveAsText/LoadFromText 的对象。【参考方案2】:

代码窗口是什么意思?

这行得通:

Private Sub Form_Load()
       Debug.Print Format(123, "Currency")

End Sub

【讨论】:

【参考方案3】:

在调试窗口中,你只是不要使用Debug.Print 相当于? 所以代码中的Debug.Print Format(123, "Currency") 应该是调试窗口中的Print Format(123, "Currency")? Format(123, "Currency")

【讨论】:

以上是关于vba 格式函数抛出类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

VBA:私有子中的编译错误 ByRef 参数类型不匹配

vba 拆分功能的类型错误和不匹配

OpenRecordSet 的数据类型不匹配错误

如何从 VBA 函数返回自定义类型

切换到 64 位 Excel 后如何修复 VBA“类型不匹配”错误

Excel VBA 类型不匹配错误