excel - retornar - Cómo devolver un resultado de una función VBA
retornar valor de una funcion vba (4)
¿Cómo devuelvo un resultado de una función?
Por ejemplo:
Public Function test() As Integer
return 1
End Function
Esto da un error de compilación.
¿Cómo hago para que esta función devuelva un entero?
El siguiente código almacena el valor de retorno en la variable retVal
y luego MsgBox
se puede usar para mostrar el valor:
Dim retVal As Integer
retVal = test()
Msgbox retVal
El solo hecho de establecer el valor de retorno al nombre de la función todavía no es exactamente el mismo que la declaración de return
Java (u otra), porque en java, return
sale de la función, de esta manera:
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
En VB, el equivalente exacto 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
Como 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 ejemplo extremo de cómo funciona la variable de retorno (pero no necesariamente un buen ejemplo de cómo deberías realmente codificar), el que te mantendrá despierto durante 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
Las funciones de VBA tratan el nombre de la función como un tipo de variable. Entonces, en lugar de usar una declaración de " return
", solo dirías:
test = 1
Tenga en cuenta, sin embargo, que esto no rompe la función. Cualquier código después de esta declaración también será ejecutado. Por lo tanto, puede tener muchas declaraciones de asignación que asignan diferentes valores para la test
, y cualquiera que sea el valor cuando llegue al final de la función será el valor devuelto.
Para los tipos de devolución sin objeto, debe asignar el valor al nombre de su función, de la siguiente manera:
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 la palabra clave Set
así:
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 la asignación de un valor de retorno al nombre de la función no termina 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: msdn.microsoft.com/en-us/library/office/…