Después de de una larga compilación de datos pudimos resolver este dilema que presentan ciertos de nuestros lectores. Te dejamos la solución y esperamos serte de mucha apoyo.
Solución:
Para los tipos de devolución que no son objetos, debe asignar el valor al nombre de su función, así:
Public Function test() As Integer
test = 1
End Function
Ejemplo de uso:
Dim i As Integer
i = test()
Si la función devuelve un tipo de objeto, entonces debe usar el Set
palabra clave como esta:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Ejemplo de uso:
Dim r As Range
Set r = testRange()
Tenga en cuenta que asignar un valor de retorno al nombre de la función no finaliza la ejecución de su función. Si desea salir de la función, debe decir explícitamente Exit Function
. Por ejemplo:
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
Documentación: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
Las funciones de VBA tratan el nombre de la función como una especie de variable. Entonces, en lugar de usar un “return
declaración, simplemente diría:
test = 1
Tenga en cuenta, sin embargo, que esto no sale de la función. Cualquier código después de esta declaración también se ejecutará. Por lo tanto, puede tener muchas declaraciones de asignación que asignan diferentes valores a test
y cualquiera que sea el valor cuando llegue al final de la función, será el valor devuelto.
Simplemente establecer el valor de retorno para el nombre de la función todavía no es exactamente lo mismo que el Java (u otro) return
declaración, porque en java, return
sale de la función, así:
public int test(int x)
if (x == 1)
return 1; // exits immediately
// still here? return 0 as default.
return 0;
En VB, el exacto equivalente toma dos líneas si no está configurando el valor de retorno al final de su función. Entonces, en VB, el corolario exacto se vería así:
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
Dado que este es el caso, también es bueno saber que puede usar la variable de retorno como cualquier otra variable en el método. Me gusta esto:
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
O, el extremo ejemplo de cómo la variable de retorno obras (pero no necesariamente un buen ejemplo de cómo debe programar en realidad), el que lo mantendrá despierto por la noche:
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
Valoraciones y reseñas
Eres capaz de corroborar nuestro estudio fijando un comentario y valorándolo te estamos agradecidos.