在 VBA 中将表单传递到模块时出现问题



我在 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

对窗体本身的引用将传递给方法。

最新更新