【问题标题】:Passing values from Function to Subroutine将值从函数传递到子程序
【发布时间】:2021-01-18 18:26:41
【问题描述】:

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

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

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

【问题讨论】:

  • 可以传参数ByRef或者直接通过函数返回值
  • 你能提供一个小例子吗?我是一个视觉型的人,所以看到会有很大帮助。

标签: excel vba function ms-access subroutine


【解决方案1】:

这里有两种选择。

使用F8 键运行代码以查看会发生什么,并确保激活Locals Window 以便查看变量值如何变化


1- 直接从函数返回值

运行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 将函数返回的值打印到中间窗口


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 将存储在 myByRefParameter 变量中的值打印到中间窗口,该变量最初在 DoSomethingReturnFromByRef 过程中声明

如果清楚请告诉我

【讨论】:

  • 完美地详细说明了它。我想我理解它并会尝试一下,看看我是否能够正确地做到这一点。
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2019-08-27
  • 2021-10-26
  • 2023-01-26
  • 2019-12-04
  • 1970-01-01
相关资源
最近更新 更多