Escribiendo Tu Primer Procedimiento VBA
Desliza para mostrar el menú
Grabar macros te enseña el vocabulario; escribir una desde cero es donde comienzas a pensar como programador.
Anatomía de un procedimiento Sub
Cada bloque reutilizable de código VBA que realiza una acción (en lugar de devolver un valor, que sería una Function) se escribe como un Sub:
Sub ProcedureName()
' instructions go here
End Sub
Con el cursor en cualquier parte dentro de un Sub, presiona F5 (o haz clic en la flecha verde Ejecutar) para ejecutarlo. Los comentarios — cualquier línea que comience con una comilla simple (') — son completamente ignorados por VBA; úsalos generosamente para explicar por qué el código hace algo, no solo qué hace, ya que el qué suele ser obvio al leer el propio código.
Hábitos de formato que ofrecen beneficios inmediatos
- Escribe
Option Expliciten la parte superior de cada módulo — obliga a declarar cada variable, lo que ayuda a detectar errores tipográficos antes de que se conviertan en fallos; - Indenta el código dentro de bucles y bloques
Ifcon una Tabulación — el VBE no te obligará a hacerlo, pero el código sin indentar se vuelve ilegible rápidamente; - Usa nombres descriptivos (
HighEarnerCount, nox) — te lo agradecerás en tres semanas.
Ejemplo práctico: resaltar altos ingresos
Vamos a escribir, manualmente, un procedimiento que recorra cada empleado en la tabla y resalte a quienes ganan más de $55,000 — algo que el grabador de macros nunca podría hacer, porque requiere una decisión (una instrucción If) repetida para cada fila (un bucle).
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— estas líneas declaran dos variables:wscontendrá una referencia a la hoja Employees, eiservirá para contar las filas;- Set
ws = ThisWorkbook.Worksheets("Employees")— este es el hábito del modelo de objetos: nombra la hoja explícitamente en lugar de depender de la que esté activa en ese momento; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— un recurso estándar que encuentra la última fila utilizada en la columnaA, sin importar cuántos empleados haya en la tabla;For i = 2 To lastRow ... Next i— un bucle que repite el código una vez por cada fila de datos, comenzando en la fila 2 para omitir el encabezado;- If
ws.Cells(i, 6).Value > 55000 Then— una decisión: solo las filas donde la columna Salary (columna 6) supera 55000 se formatean; MsgBox— una ventana emergente simple que confirma que la macro ha finalizado.
Escribe este procedimiento en modIntro, coloca el cursor dentro de él y presiona F5. Verifica los números tú mismo: Emma Davis y Olivia Brown son las dos empleadas que ganan más de $55,000 en la tabla de ejemplo.
Tarea
- Escribe
HighlightTopEarnersexactamente como se muestra en modIntro y ejecútalo. Confirma que dos filas se vuelven verdes. - Duplica el procedimiento como
HighlightITDepartmenty cambia la condición para que resalte cualquier fila donde el Departamento (columna 3) sea igual a "IT" en lugar de verificar el Salario. - Agrega un comentario encima de cada procedimiento explicando, en una sola frase, qué hace — practica escribir comentarios para el lector, no para ti mismo.
- Guarda el libro nuevamente (sigue siendo
.xlsm, así que unCtrl+Snormal es suficiente).
- Selecciona todo el procedimiento
HighlightTopEarners(desdeSubhastaEnd Sub), cópialo y pégalo justo debajo de sí mismo enmodIntro. - Cambia el nombre de la segunda copia en la línea
SubaSub HighlightITDepartment()— cada procedimiento en un módulo necesita un nombre único, o VBA no sabrá a cuál te refieres cuando intentes ejecutarlo. - La condición que debes cambiar es la línea
If. Actualmente verifica un número:
If ws.Cells(i, 6).Value > 55000 Then
Ahora debe verificar texto — columna 3 (Departamento) igual a "IT". Recuerda del Capítulo 2 que las comparaciones de texto necesitan comillas alrededor del valor a comparar, y se usa = en lugar de >.
4. Todo lo demás dentro del bucle (la línea Interior.Color, la estructura del bucle) puede permanecer igual — solo cambia la condición que se evalúa.
Agregar comentarios
- Una línea de comentario comienza con una apóstrofe (
') y va en su propia línea directamente encima de la líneaSub— no dentro del procedimiento. - Escríbelo como si explicaras la macro a un compañero que nunca la ha visto, no como un recordatorio para ti mismo. Compara:
- Poco útil:
' recorre las filas(describe cómo, lo cual ya muestra el código) - Más útil:
' Resalta empleados que ganan más de $55,000(describe qué logra, lo cual no es obvio a simple vista)
- Poco útil:
- Haz lo mismo para el segundo procedimiento — una frase que describa qué resalta y por qué, en términos del propósito empresarial (personal del departamento de IT), no la mecánica del bucle.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Escribe ambos en modIntro, ejecuta primero HighlightTopEarners y confirma que exactamente dos filas se vuelven verdes (Emma Davis con $62,000 y Sophia Miller con $59,000 — las otras tres están en o por debajo de $55,000), luego ejecuta HighlightITDepartment y confirma que la fila de Sophia Miller se resalta en su lugar. Guarda con Ctrl+S una vez que ambos funcionen.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla