我在 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
我在这里做错了什么? 两个事件调用以相同的形式调用,并在同一模块中调用函数。
您似乎没有对函数的返回值执行任何操作,因此不要将参数括在括号中。
'preventSimultaneousPassAndFail (Me)
preventSimultaneousPassAndFail Me
这是标准的 VBA 做法。 不幸的是,我无法解释为什么它在一种情况下触发了错误,而在另一种情况下却没有。 因此,此问题可能不会导致问题,但我仍然建议您进行更改以排除它。
虽然我们不知道有关这些功能的任何细节,但我建议您考虑将表单对象传递ByRef
而不是ByVal
。
您收到错误的原因是,在
preventSimultaneousPassAndFail (Me)
括号表达式尝试调用对象的默认成员。如果是 Access.Form,则 Name 属性的类型为 String。这就是类型不匹配错误的原因。
在以下情况下
preventSimultaneousPassAndFail Me
对窗体本身的引用将传递给方法。