【问题标题】:VBA: Cannot assign a function's returned value to a variable [duplicate]VBA:无法将函数的返回值分配给变量[重复]
【发布时间】:2021-12-29 10:27:04
【问题描述】:

我的一张工作表中有以下 VBA 代码(即不在模块中):

Option Explicit

Public timing As String

Sub ButtonLoan1_Click()

    timing = check_timing()
    Application.Run ("loan_" & timing & "_req01")

End Sub

函数check_timing在模块中定义并正常工作:

Function check_timing()
    
    If ActiveSheet.Range("B5") = "Q1 and Q3" Then
        timing = "q1q3"
    ElseIf ActiveSheet.Range("B5") = "Q2 and Q4" Then
        timing = "q2q4"
    End If
    
    Exit Function

End Function

但是,运行 ButtonLoan1_Click() Sub 会返回错误,因为变量 timing 是空的,即它没有像我希望的那样从函数 check_timing 获取它的值。我做错了什么?

【问题讨论】:

  • 在函数中,您将值分配给函数名称以返回值,因此 check_timing = "q1q3"check_timing = "q2q4"
  • 您需要在程序之外公开timing 或将您的退货更改为check_timing

标签: vba function module


【解决方案1】:

我的猜测是你应该使用check_timing 而不是timing 所以VBA 知道这是函数返回给之前调用它的人的内容。

Function check_timing()
    
    If ActiveSheet.Range("B5") = "Q1 and Q3" Then
        check_timing = "q1q3"
    ElseIf ActiveSheet.Range("B5") = "Q2 and Q4" Then
        check_timing = "q2q4"
    End If
    
    Exit Function

End Function

【讨论】:

  • Exit Function 是多余的,可以删除。 check_timing 也应该接受 Range 参数而不是使用 ActiveSheet.Range("B5")
  • 另外,还要添加字符串的返回类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多