Saltar al contenido

devolver array de la función en VBA

Contamos con el hallazgo a este asunto, o por lo menos eso pensamos. Si continuas con inquietudes déjanoslo saber en un comentario, que sin dudarlo te ayudaremos

Solución:

Dale a la función el tipo como un array:

function getStats() as Integer()    
    dim returnVal(0 to 3) as integer

    returnVal(0) = c2percent14
    returnVal(1) = c3percent14
    returnVal(2) = c4percent14
    returnVal(3) = c5percent14

    getStats = returnVal
end function

Sub mysub()
   Dim myArray() As Integer

   myArray = getStats()

   msgbox myArray(3)
end sub 

Function getStats() As Variant

getStats ahora es una matriz y no un entero

Voy a agregar una respuesta aquí porque estoy feliz de decir que, después de horas de frustración y mala información, ¡finalmente sé cómo devolver arreglos! Así es como se devuelve un array de una función:

Sub mysub()
    Dim i As Integer, s As String
    Dim myArray() As Integer 'if you declare a size here you will get "Compile error, can't assign to array"
    myArray = getStats()

    s = "Array values returned:" & vbCrLf
    For i = 0 To UBound(myArray)
        s = (s & myArray(i) & " ")
    Next
    MsgBox s
End Sub

Function getStats() As Integer() 'The return type must be EXACTLY the same as the type declared in the calling sub.
    Dim returnVal(2) As Integer 'if you DON'T declare a size here you will get "Run-time error '9': Subscript out of range"

    returnVal(0) = 0
    returnVal(1) = 1
    returnVal(2) = 2
    'returnVal(3) = 3 This will throw an error. Remember that an array declared (2) will hold 3 values, 0-2.
    getStats = returnVal
End Function

Producción:
ingrese la descripción de la imagen aquí

Los comentarios que incluí aquí son muy importantes. Aunque VBA suele ser bastante laxo, esto en particular es muy exigente. Estos son necesarios para su función, asignación y regreso al trabajo:

  • los array declarado en el sub que llama tiene que ser de longitud no declarada.
  • La función que devuelve un array tiene que ser EXACTAMENTE del mismo tipo. Incluso si declaras la array en el sub como Variant y la función devuelve un Integer array eso tampoco funcionará.
  • Tienes que usar un temporal array en la función. No puede asignar valores al nombre de la función (getStats) como lo haría normalmente en una función; solo puedes asignar el temporal array al nombre de la función una vez que haya asignado todos los valores a la temperatura array. Cualquier intento de ReDim getStats como un array también arrojará un error.
  • la temperatura array tiene que ser declarado con longitud. En VBA no puede asignar valores a un array en un índice hasta que declare la longitud.

Puedes añadir valor a nuestra información participando con tu experiencia en las referencias.

¡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 *