【问题标题】:Error calling class function in VBA在 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 好点,谢谢!

标签: ms-access vba


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2011-03-07
      • 2023-03-15
      • 1970-01-01
      • 2018-01-20
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多