Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何从VBA函数返回结果_Excel_Vba_Function_Return_Return Value - Fatal编程技术网

Excel 如何从VBA函数返回结果

Excel 如何从VBA函数返回结果,excel,vba,function,return,return-value,Excel,Vba,Function,Return,Return Value,如何从函数返回结果 例如: Public Function test() As Integer return 1 End Function Function test(ByVal justReturnOne As Boolean) As Integer If justReturnOne Then test = 1 Exit Function End If 'more code... test = 2 End Functio

如何从函数返回结果

例如:

Public Function test() As Integer
    return 1
End Function
Function test(ByVal justReturnOne As Boolean) As Integer
    If justReturnOne Then
        test = 1
        Exit Function
    End If
    'more code...
    test = 2
End Function
这会导致编译错误


如何使此函数返回整数?

对于非对象返回类型,必须将值指定给函数名,如下所示:

Public Function test() As Integer
    test = 1
End Function
Public Function testRange() As Range
    Set testRange = Range("A1")
End Function
用法示例:

Dim i As Integer
i = test()
Dim r As Range
Set r = testRange()
如果函数返回一个对象类型,则必须使用如下
Set
关键字:

Public Function test() As Integer
    test = 1
End Function
Public Function testRange() As Range
    Set testRange = Range("A1")
End Function
用法示例:

Dim i As Integer
i = test()
Dim r As Range
Set r = testRange()
请注意,为函数名指定返回值不会终止函数的执行。如果要退出函数,则需要显式地说
exit function
。例如:

Public Function test() As Integer
    return 1
End Function
Function test(ByVal justReturnOne As Boolean) As Integer
    If justReturnOne Then
        test = 1
        Exit Function
    End If
    'more code...
    test = 2
End Function

文档:

VBA函数将函数名本身视为一种变量。因此,不要使用“
return
”语句,您只需说:

test = 1

但是请注意,这并没有中断函数。此语句之后的任何代码也将被执行。因此,您可以有许多赋值语句将不同的值赋给
test
,当您到达函数末尾时,无论值是什么,都将返回值。

仅将返回值设置为函数名仍然与Java(或其他)
return
语句不完全相同,因为在Java中,
return
退出函数,如下所示:

Public Function test() As Integer
    test = 1
End Function
Public Function testRange() As Range
    Set testRange = Range("A1")
End Function
public int测试(int x){
如果(x==1){
return 1;//立即退出
}
//仍在此处?返回0作为默认值。
返回0;
}
在VB中,如果未在函数末尾设置返回值,则精确的等价项需要两行。因此,在VB中,确切的推论如下:


既然是这样,也很高兴知道您可以像方法中的任何其他变量一样使用返回变量。像这样:

公共函数测试(ByVal x为整数)为整数

test=x'以下代码将返回值存储在变量
retVal
中,然后
MsgBox
可用于显示该值:

Dim retVal As Integer
retVal = test()
Msgbox retVal

事实上,你用额外的信息更清楚地回答了这个问题(这可能会导致另一个问题,从新手到VBA高手)。保持良好的工作状态,抱歉,你刚才的回答似乎与我的答案相同,我首先得到了答案,但只是补充了一个事实,即它不会中断功能。这是一个很好的补充,我只是觉得作为一个评论更合适。我不确定什么是正确的礼仪,我想这是一个有点粗鲁的否决票,因为这是一个很好的答案,但它不会让我撤销它。为了完整性,应该注意的是,当你返回一个对象时(例如
范围
),您需要像在常规方法中设置对象变量一样使用
Set
。因此,例如,如果“test”是一个返回范围的函数,那么return语句将如下所示:
set test=Range(“A1”)
。为什么是@JayCarr?@PsychoData?这仅仅是因为您通常是这样设置对象变量的,如果不设置
set
,则会导致问题。如果不使用,我会遇到一些问题,但如果我使用
set
I don:)。我认为还值得一提的是,当从电子表格调用函数时,与从另一个VBA函数或子函数调用函数时,函数的行为有所不同。在VBA中调用函数时,函数将返回一个范围对象,但是当从工作表中调用时,它将只返回值,因此
set test=Range(“A1”)
test=Range(“A1”)完全等效。value
,其中“test”被定义为一个变量,而不是一个范围。文档:“很高兴知道您可以像方法中的任何其他变量一样使用返回变量”大多数情况下是正确的,但例如,如果返回类型为
Variant
,并且您的目标是返回数组,则类似于
ReDim test(1到100)
的内容将触发错误。此外,即使可以像处理
整数那样处理基本类型,它也被认为有点不规则。这使得代码更难阅读。VBA程序员扫描分配给函数名的行,以了解函数的功能。使用函数名作为正则变量不必要地掩盖了这一点。@JohnColeman完全同意这两点。最后一个例子绝不应该是推荐的方法之一。但是,主题问题是关于如何返回一个变量,因此这只是对VB返回结果的一个完整解释,以及它们如何工作的一个尝试。当然,最后一个案例不是建议。(我当然不会将其编码为一个示例。)因此,您的观点得到了很好的采纳,并且是很好的补充。谢谢。它对小函数很有用,任何VBA程序员都应该知道,所以我对你提到它没有异议。我只是觉得应该包括一个警告。@Gene我不明白。无需将变量声明为数组,以
ReDim
It<代码>变型变光测试
后接
ReDim测试(1到100)
是无问题的。在函数体中不能使用变量函数的名称,这表明不能像在函数体中使用任何其他变量一样使用返回变量,这正是我所说的。顺便说一句,你使用感叹号似乎太过分了。在互联网环境下,它似乎有点像巨魔,虽然你的评论没有什么像巨魔一样。@Gene你是对的,只是偶然而已。你的理由是错误的。