Usar para cada uno en una matriz usando VBA

Bilal Shahid 21 junio 2023
Usar para cada uno en una matriz usando VBA

Hay dos tipos de bucles For en VBA:

  1. Bucle Para cada uno
  2. Bucle Para el siguiente

Este artículo describe el uso de un bucle For Each en una matriz. En el artículo también se proporciona un ejemplo relacionado con el bucle For To Next.

Use For Each en una matriz usando VBA

Ejemplo 1:

Para iterar un bucle For Each en una matriz, podemos usar la siguiente sintaxis:

Public Sub sampleProgram()
    Dim arr(7) As String
    Dim element As Variant

    For Each element In arr
        func1 element
    Next element
End Sub

Sub func1(ByVal ele As String)
End Sub

El código puede parecer abrumador; sin embargo, se ha descrito a continuación para ayudarlo a comprender cada declaración con precisión.

Es esencial declarar la matriz primero para iterar usando un bucle For Each sobre una matriz. Puede declarar una matriz de cualquier tipo de datos; para este ejemplo, la matriz arr se ha declarado una cadena con 7 elementos.

Para que la matriz funcione como un iterador para For Each, la variable element se declara de tipo Variant. La variable element se usa luego como un iterador que toma el valor de la matriz arr e itera sobre la matriz.

Dentro del bucle se utiliza una subrutina func1(), que toma como parámetro el elemento iterativo del array arr. El elemento es del tipo de datos Variant porque actúa como un iterador para el bucle For Each.

Cuando se pasa element a func1() como parámetro, hay que asegurarse de que func1() acepta un parámetro de tipo Variant. Para ello se pueden hacer dos cosas:

  1. Hacer una subrutina que tome el parámetro por valor, como se define en el ejemplo anterior, ByVal ele As String.
  2. De lo contrario, convierta la Variante a un tipo de datos de cadena antes de pasarla a la subrutina. Aquí está el fragmento de código para convertir el elemento a un tipo de datos de cadena:
func1 CStr(element)

El func1() en el ejemplo de código es una subrutina llamada en el bucle For Each sobre cada valor de matriz. Como ficticio, esta subrutina se ha mantenido vacía para el usuario.

Se puede completar con el trabajo que se requiere realizar. De lo contrario, la llamada a la subrutina también se puede omitir en el bucle Para cada uno.

Ejemplo 2:

El segundo ejemplo analiza el bucle For To Next como una alternativa al bucle For Each discutido anteriormente.

El bucle For Each está estructurado en torno a la colección de objetos. Como se discutió en el primer ejemplo, una variable de tipo de datos Variant o un objeto se usa como un iterador para el ciclo.

Además, si se utiliza una función, esta debe aceptar parámetros de tipo Variante.

El bucle For To Next funciona de manera diferente.; hace uso de los límites superior e inferior de la matriz. Además, se utiliza una variable de tipo Integer para iterar el bucle, que también se puede utilizar para acceder a todos los elementos de la matriz.

Aquí hay un fragmento de código:

Public Sub sampleProgram()
    Dim arr(7) As String
    Dim i As Long

    For i = LBound(arr) To UBound(arr)
        func1 arr(i)
    Next i
End Sub

Se ha declarado un array en el sampleProgram() como arr de tipo de datos String. Se ha declarado un iterador i de tipo de datos Largo para iterar a través de la matriz.

Como se discutió anteriormente, los límites inferior y superior de la matriz se calculan mediante funciones específicas. El bucle For To Next itera el número definido de veces y llama a la subrutina func1() en cada iteración.

El valor en el elemento de matriz específico arr(i) se pasa a func1() como parámetro; por lo tanto, no habrá problemas con el tipo de datos Variante.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Artículo relacionado - VBA Array