将值从函数传递到子例程

Passing values from Function to Subroutine

我一直在四处寻找这个问题的答案,但一直找不到能够很好地解释我所理解的答案。

我没有使用函数的经验,总体上 VBA 也很少。因此,如果我有一个正在执行的子例程,然后调用一个我将参数传递给的函数,一旦该函数运行,我如何将结果返回到要使用的主子例程中?

这适用于 Access,我从一个记录集中提取一个数字,然后将其传递给一个用于插入以创建新数字的函数。然后我需要将该数字传回要使用的子例程。

这里有两种选择。

运行 使用 F8 键查看会发生什么的代码,并确保激活 Locals Window 这样您就可以看到变量值如何变化


1- Return 直接来自函数的值

运行 DoSomethingReturnFromFunction

' Return value from function
Public Sub DoSomethingReturnFromFunction()
    
    ' Define a parameter
    Dim myParameter As String
    myParameter = "SomeValue"
    
    ' Call a function and store its value into a variable
    Dim myResult As Long
    myResult = MyFunction(myParameter)
    
    ' Print the result variable
    Debug.Print myResult

End Sub

Private Function MyFunction(ByVal myParameter as String) As Long

    Dim result As Long

    Select Case myParameter
    Case "SomeValue"
        result = 1
    Case Else
        result = 2
    End Select
    
    ' Assign the result value to the function
    MyFunction = result

End Function

结果:Debug.Print myResult 打印到中间 window 函数返回的值


2- 更改在另一个函数中通过 ByRef 传递的变量值

运行 DoSomethingReturnFromByRef

' Change variable value passed ByRef inside another function
Public Sub DoSomethingReturnFromByRef()
    
    ' Call a function
    Dim myByRefParameter As Long
    MySub myByRefParameter
    
    ' Print the result
    Debug.Print myByRefParameter

End Sub

Private Sub MySub(ByRef myByRefParameter As Long)
    
    ' Change the value of the variable passed ByRef inside the procedure
    myByRefParameter = 1

End Sub

结果:Debug.Print myByRefParameter 向中间 window 打印存储在 myByRefParameter 最初在 DoSomethingReturnFromByRef 过程

中声明的变量中的值

如果清楚请告诉我