DOMINA-BACH Básico study materials
DOMINA-BACH Básico study resources

DOMINA-BACH Básico cheat sheet

DOMINA-BACH Básico · Keep the key ideas within reach.

Quick reference

Fundamentos del lenguaje y estructura de una macro

  • Un módulo estándar contiene procedimientos Sub y Function; los módulos de objeto (ThisWorkbook, hojas) contienen código de eventos y no deben alojar macros de uso general.

  • Sub nombre() ... End Sub define un procedimiento que se ejecuta pero no devuelve valor; Function nombre(...) As Tipo ... End Function sí devuelve valor.

  • Option Explicit en la cabecera del módulo obliga a declarar toda variable; sin ella, las variables no declaradas son Variant y se crean al asignarlas.

  • Los comentarios empiezan con apóstrofo (') o con Rem; la línea continúa con un espacio seguido de guion bajo ( _) y no puede partir una cadena entre comillas.

  • Application.Run "NombreMacro" permite invocar una macro por nombre en tiempo de ejecución, útil para llamadas dinámicas entre libros.

  • Una macro se puede disparar desde Alt+F8, un botón de formulario, un control ActiveX, un atajo Ctrl+letra asignado en el cuadro de macros o un evento.

  • La instrucción With objeto ... End With fija un objeto de referencia y evita repetir el nombre del objeto en cada propiedad o método.

  • Un procedimiento puede declararse Private (visible solo en su módulo) o Public (visible desde otros módulos del mismo proyecto).

Quick reference

Referencias, rangos y objetos de Excel

  • Range("A1:B10") usa notación A1; Cells(fila, columna) usa índices numéricos; Range(Cells(1,1), Cells(10,2)) combina ambos enfoques.

  • Offset(filas, columnas) desplaza una referencia relativa; Resize(filas, columnas) cambia su tamaño; ninguno mueve el rango original.

  • Rows.Count y Columns.Count devuelven el total de la hoja (1.048.576 y 16.384 en formato xlsx); para el último dato real use Cells(Rows.Count, "A").End(xlUp).Row.

  • La jerarquía de objetos es Application > Workbook > Worksheet > Range; omitir referencias usa el objeto activo (ActiveSheet, ActiveCell, Selection).

  • Value2 devuelve el valor subyacente sin formato de moneda ni fecha; Value aplica el tipo de dato de Excel; Text devuelve la cadena mostrada.

  • WorksheetFunction expone funciones de Excel desde VBA, por ejemplo Application.WorksheetFunction.VLookup(...); si la función falla, se produce un error capturable.

  • Intersect y Union combinan o cruzan rangos; si Intersect no encuentra celdas comunes devuelve Nothing y debe comprobarse antes de usar el resultado.

  • Range("A1").CurrentRegion devuelve el bloque contiguo delimitado por filas y columnas vacías, útil para recorrer tablas sin conocer su tamaño.

Quick reference

Variables, tipos de datos y constantes

  • Tipos numéricos: Byte (0-255), Integer (-32.768 a 32.767), Long (aprox. ±2.147 millones), Single y Double para decimales, Currency para importes con 4 decimales fijos.

  • String puede ser de longitud variable o fija (Dim s As String * 10); Boolean es True/False; Date almacena fecha y hora como número de serie.

  • Variant es el tipo por defecto y puede contener cualquier valor, incluidos Empty, Null y Error; su uso indiscriminado penaliza rendimiento y claridad.

  • Dim declara a nivel de procedimiento; Private a nivel de módulo; Public o Global a nivel de proyecto; Static conserva el valor entre llamadas al procedimiento.

  • Const PI As Double = 3.14159 declara una constante; no puede reasignarse en tiempo de ejecución y debe inicializarse en la declaración.

  • La conversión implícita puede redondear (Integer recibe 2,5 como 2 por redondeo bancario); use CLng, CInt, CDbl, CStr, CDate o CCur para controlar la conversión.

  • IsEmpty comprueba si una Variant no se ha inicializado; IsNull comprueba Null; Nothing solo se compara con variables de objeto (Set obj = Nothing).

  • Las variables de módulo conservan su valor mientras el proyecto esté cargado; las locales se reinician al terminar el procedimiento salvo que se declaren Static.

Quick reference

Estructuras de control y bucles

  • If condicion Then ... ElseIf ... Else ... End If admite condiciones múltiples; la forma de una línea (If x Then y) no permite ElseIf ni End If.

  • Select Case expresion ... Case valor1 ... Case Is > 10 ... Case Else ... End Select evalúa una sola expresión y sale al primer Case coincidente.

  • For i = inicio To fin [Step n] ... Next i repite un número conocido de veces; Step -1 recorre en orden descendente.

  • For Each elemento In coleccion ... Next recorre colecciones y arrays sin conocer índices; el elemento debe ser Variant u Object según la colección.

  • Do While condicion ... Loop comprueba antes de ejecutar; Do ... Loop While condicion comprueba después y garantiza al menos una ejecución.

  • Do Until condicion ... Loop se ejecuta mientras la condición sea False; es el complemento lógico de Do While.

  • Exit For y Exit Do abandonan el bucle inmediatamente; Exit Sub y Exit Function abandonan el procedimiento completo.

  • GoTo etiqueta salta a una línea marcada con etiqueta:; su uso se limita a la gestión de errores o salidas de emergencia, no a la lógica normal.

Quick reference

Procedimientos, funciones y paso de argumentos

  • ByRef es el paso por defecto: el procedimiento puede modificar la variable original del llamador; ByVal pasa una copia y protege el valor original.

  • Optional permite omitir un argumento; debe declararse al final de la lista y comprobarse con IsMissing antes de usarlo.

  • ParamArray args() As Variant acepta un número variable de argumentos y debe ser el último parámetro de la firma.

  • Una Function puede devolver un array o un objeto si se declara como Variant o como el tipo de objeto correspondiente; para objetos use Set NombreFuncion = objeto.

  • El nombre del procedimiento es la variable de retorno en una Function; asignarle valor antes de End Function establece el resultado.

  • Application.Run y Call nombre(argumentos) invocan procedimientos; con Call los argumentos van entre paréntesis, sin Call se omiten.

  • Un procedimiento Private no aparece en el cuadro de macros Alt+F8; un Sub Public sin argumentos sí aparece.

  • Pasar un argumento ByRef a un procedimiento que no lo modifica sigue siendo visible para el llamador; declare ByVal cuando no necesite devolver cambios.

Quick reference

Manejo de errores y depuración

  • On Error GoTo etiqueta desvía la ejecución a un manejador; On Error Resume Next ignora el error y continúa en la línea siguiente; On Error GoTo 0 restaura el manejo normal.

  • En el manejador, Err.Number identifica el error, Err.Description lo describe y Err.Source indica el proyecto; Err.Clear o Resume limpian el objeto Err.

  • Resume reejecuta la línea que falló; Resume Next continúa en la siguiente; Resume etiqueta salta a una etiqueta concreta.

  • La estructura recomendada es: On Error GoTo Salida, código, Salida: mostrar mensaje, limpiar recursos y salir del procedimiento.

  • Err.Raise numero, origen, descripcion permite generar errores personalizados; los números personalizados suelen empezar en vbObjectError + 513.

  • La ventana Inmediato (Ctrl+G) ejecuta instrucciones sueltas y muestra Debug.Print; es la herramienta básica de inspección sin interrumpir el flujo.

  • F8 ejecuta paso a paso, F5 continúa, Shift+F8 avanza sobre la llamada; los puntos de interrupción (F9) detienen la ejecución en una línea concreta.

  • La ventana Locals muestra las variables del procedimiento actual; Watch permite vigilar una expresión y detenerse cuando cambia su valor.

Quick reference

Interacción con el usuario y eventos básicos

  • MsgBox(prompt, botones, titulo) devuelve un valor vbYes, vbNo, vbOK, vbCancel, vbRetry o vbIgnore según el botón pulsado.

  • InputBox(prompt, titulo, valorPredeterminado) devuelve una cadena; si el usuario cancela devuelve una cadena vacía, no un error.

  • Application.InputBox con Type:=1 fuerza la entrada numérica y devuelve False si se cancela; Type:=8 permite seleccionar un rango.

  • Los eventos de hoja incluyen Worksheet_Change (tras modificar una celda), Worksheet_SelectionChange (al cambiar la selección) y Worksheet_BeforeDoubleClick.

  • El evento Workbook_Open se ejecuta al abrir el libro; Workbook_BeforeClose permite cancelar el cierre con Cancel = True.

  • Application.EnableEvents = False evita que un evento se dispare a sí mismo al modificar celdas desde código; restáurelo a True al terminar.

  • Target en un evento es el rango afectado; If Not Intersect(Target, Range("A1:A10")) Is Nothing Then limita la acción a un área concreta.

  • UserForm.Show abre un formulario modal por defecto; UserForm.Show vbModeless lo abre sin bloquear la hoja, y Unload Me lo cierra desde su propio código.