Usar para cada uno en una matriz usando VBA
Hay dos tipos de bucles For
en VBA:
- Bucle
Para cada uno
- 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:
- Hacer una subrutina que tome el parámetro por valor, como se define en el ejemplo anterior,
ByVal ele As String
. - 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 elelemento
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
.
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