1

我在 Access 2010 中的表单上有一个单击事件,如下所示:

Private Sub SaveRecord_Click()
     checkDataIntegrity(Me)
End Sub

其中checkDataIntegrity定义如下:

Function checkDataIntegrity(ByVal fForm As form) As Boolean

这工作得很好,花花公子。但是,我还有另一个点击事件:

Private Sub LFS_Flashed_Successfully_Fail_Click()
     preventSimultaneousPassAndFail (Me)
End Sub

其中preventSimultaneousPassAndFail定义如下:

Function preventSimultaneousPassAndFail(ByVal fForm As form) As Boolean

当我调用此单击事件时,出现以下错误:

Run-time error '13':
Type mismatch

我在这里做错了什么?两个事件调用都以相同的形式调用,并调用同一模块中的函数。

4

2 回答 2

0

您似乎没有对函数的返回值做任何事情,所以不要将参数括在括号中。

'preventSimultaneousPassAndFail (Me)
preventSimultaneousPassAndFail Me

这是标准的 VBA 实践。不幸的是,我无法解释为什么它在一种情况下触发了错误,而在另一种情况下却没有。所以这个问题可能不会导致问题,但我仍然建议您进行更改以排除它。

虽然我们不知道有关这些函数的任何细节,但我建议您考虑传递表单对象ByRef而不是ByVal.

于 2013-10-10T18:15:07.610 回答
0

您收到错误的原因是

preventSimultaneousPassAndFail (Me)

括号表达式尝试调用对象的默认成员。对于 Access.Form,这是 String 类型的 Name 属性。这就是类型不匹配错误的原因。

的情况下

preventSimultaneousPassAndFail Me

对表单本身的引用被传递给方法。

于 2013-10-11T09:36:33.437 回答