Saltar al contenido

Cómo devolver un resultado de una función VBA

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 “returndeclaració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 testy 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *