在 VBA 中调用类函数时出错

Posted

技术标签:

【中文标题】在 VBA 中调用类函数时出错【英文标题】:Error calling class function in VBA 【发布时间】:2018-04-12 13:58:15 【问题描述】:

我的 Access 数据库中有这个类模块:

Option Compare Database

Public Event BeforeCalc()

Public Sub Calculate(ByVal i As Integer, ByVal y As Integer)
    RaiseEvent BeforeCalc
    Calculate = i + y
End Sub


Private Sub Class_Initialize()
    Debug.Print "Inside construcotr"
End Sub

然后,在自定义表单中:

Option Compare Database

Private WithEvents math As MyMath

Private Sub btnCalculate_Click()
    Dim result As Integer
    Set result = math.Calculate(CInt(txtI.Text), CInt(txtY.Text))
End Sub

Private Sub Form_Load()
    Set math = New MyMath
End Sub

Private Sub math_BeforeCalc()
    MsgBox "About to Calc!", vbInformation
End Sub

当我单击表单按钮 btnCalculate 时,我在 math.Calculate 处收到此错误:

“编译错误。预期的函数或变量。”

我的代码有什么问题?

【问题讨论】:

请注意,.Text 是错误的使用属性(它仅在控件具有焦点时有效)。请改用.Value @Andre 好点,谢谢! 【参考方案1】:

因为它是一个函数,所以它应该返回一些东西,在你的情况下是一个整数,你也应该指定 Function 关键字。

替换代码:

Public Sub Calculate(ByVal i As Integer, ByVal y As Integer)
     RaiseEvent BeforeCalc
     Calculate = i + y
End Sub

与:

Public Function Calculate(ByVal i As Integer, ByVal y As Integer) as Integer
    RaiseEvent BeforeCalc
    Calculate = i + y
End Sub

【讨论】:

【参考方案2】:

您已将Calculate 定义为Sub,尝试将其定义为Function:

Public Function Calculate(ByVal i As Integer, ByVal y As Integer) as Integer
    RaiseEvent BeforeCalc
    Calculate = i + y
End Function

另外,不要set结果:

Private Sub btnCalculate_Click()
    Dim result As Integer
    result = math.Calculate(CInt(txtI.Text), CInt(txtY.Text))
End Sub

【讨论】:

以上是关于在 VBA 中调用类函数时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用个人 VBA 函数时出错

用Excel使用VBA时显示运行错误5,错误调用参数,程序特别简单,如图,求问哪里出错了

VBA出错时如何从函数返回

在 VBA 中设置 UDF 描述时出错

Python - 从类调用函数时出错[重复]

调用元类基础函数()参数时出错 1 必须是代码而不是 str