valor una retornar personalizada parametros llamar funciones funcion con como excel vba excel-vba function result

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/…