Uso de For each … Next en vba Excel
El constructor For each … Next nos permite la manipulación de objetos dentro de una colección. Una colección es el conjunto de elementos de un mismo tipo, por ejemplo, colección de celdas, de hojas, de libros, de ventanas, objetos gráficos, etc.
A diferencia del constructor For … Next, que nos permite elegir el inicio y fin de una numeración, la cual se puede asignar para varios motivos, For each … Next incluye todos los objetos de las colecciones de Office.
Expongo 3 macros sencillas que nos permitirán conocer el uso del constructor, lo demás será cuestión de aplicar los métodos o procedimientos de cada objeto en cuestión.
Colección de celdas
Aplicable en la manipulación de celda contenidas en un rango elegido, por ejemplo: cambiar color, tamaño, insertar comentario, aplicar una función, etc. El siguiente ejemplo nos arroja un objeto MsgBox donde nos dice la ruta de cada celda elegidas, así como su contenido:
Sub CadaCelda() 'Se declara la variable Celda como rango Dim Celda As Range For Each Celda In Selection MsgBox "La celda " & Celda.Address & " Tiene el contenido " & Celda.Value, vbInformation, "EXCELeINFO" Next Celda End Sub
Colección de hojas
Las acciones que se pueden realizar con las hojas, entre otras, son: eliminar, cambiar nombre, color de etiqueta, ocultar, mostrar, mover. El ejemplo muestra mediante un MsgBox él número correspondiente al índice de cada hoja, así como su nombre:
Sub CadaHoja() 'Se declara la variable Hoja como objecto Dim Hoja As Object For Each Hoja In ThisWorkbook.Sheets MsgBox "La hoja " & Hoja.Index & " Se llama " & Hoja.Name, vbInformation, "EXCELeINFO" Next Hoja End Sub
Colección de archivos
También se podrá utilizar la colección Windows, para poder manipular ventanas, valga la redundancia. Con los libros se podrá guardar, cerrar, imprimir, etc. La macro siguiente nos muestra el nombre de cada archivo abierto. Nótese que también nos muesta el nombre de los archivos ocultos:
Sub CadaLibro() 'Se declara la variable Libro como objecto Dim Libro As Object For Each Libro In Application.Workbooks MsgBox "El libro tiene el nombre " & Libro.Name, vbInformation, "EXCELeINFO" Next Libro End Sub
Como nos hemos dado cuenta el constructor tiene una estructura sencilla y digerible, lo demás será cuestión de conocer que más podemos hacer con todos los objetos de Excel, instruirnos y echar a volar nuestra curiosidad.