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:
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.