VBA:无法将函数的返回值分配给变量[重复]

Posted

技术标签:

【中文标题】VBA:无法将函数的返回值分配给变量[重复]【英文标题】:VBA: Cannot assign a function's returned value to a variable [duplicate] 【发布时间】: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 【参考方案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") 另外,还要添加字符串的返回类型

以上是关于VBA:无法将函数的返回值分配给变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将命名范围值分配给变量(Excel VBA) - 新手

如何等待module.export函数完成请求,然后再将其返回值分配给不同JS文件中的变量[重复]

将变量传递给函数\使用该变量返回一个新值\重复直到值达到 0

如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?

将 vlookup 值分配给变量

如何将承诺的返回值分配给变量? [复制]