如何从一个函数中返回一个结果?
比如说。
Public Function test() As Integer
return 1
End Function
这给出了一个编译错误。
我怎样才能使这个函数返回一个整数?
对于非对象的返回类型,你必须将该值分配给你的函数名称,像这样。
Public Function test() As Integer
test = 1
End Function
使用实例。
Dim i As Integer
i = test()
如果函数返回的是对象类型,那么必须使用Set
关键字,比如这样。
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
使用实例。
Dim r As Range
Set r = testRange()
请注意,为函数名指定一个返回值并不能终止你的函数的执行。如果你想退出函数,那么你需要明确地说 "Exit Function"。比如说
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
文档:http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
只是将返回值设置为函数名,仍然与Java(或其他)的return
语句不*完全相同,因为在java中,return
会退出函数,像这样。
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
在VB中,如果你没有在函数的末尾设置返回值,**精确的对应关系需要两行。因此,在VB中,确切的推论是这样的。
Public Function test(ByVal x As Integer) As Integer
If x = 1 Then
test = 1 ' does not exit immediately. You must manually terminate...
Exit Function ' to exit
End If
' Still here? return 0 as default.
test = 0
' no need for an Exit Function because we're about to exit anyway.
End Function
既然如此,你可以像方法中的其他变量一样使用返回变量,这一点也很好。像这样。
Public Function test(ByVal x As Integer) As Integer
test = x ' <-- set the return value
If test <> 1 Then ' Test the currently set return value
test = 0 ' Reset the return value to a *new* value
End If
End Function
或者,返回变量如何工作的极端例子(但不一定是你应该如何实际编码的好例子)--那个会让你夜不能寐的例子。
Public Function test(ByVal x As Integer) As Integer
test = x ' <-- set the return value
If test > 0 Then
' RECURSIVE CALL...WITH THE RETURN VALUE AS AN ARGUMENT,
' AND THE RESULT RESETTING THE RETURN VALUE.
test = test(test - 1)
End If
End Function