TL;DR — Pon
Option Expliciten la primerísima línea de cada módulo y VBA se negará a ejecutar cualquier macro que use una variable que nunca declaraste. Sin él, una errata comototalSaiesno es un error — VBA crea en silencio una variable nueva y vacía, tu total vuelve como0y nada te avisa. Es una directiva, no código de ejecución: corre en tiempo de compilación, así que el fallo aflora antes de que se ejecute una sola línea. Activa Herramientas > Opciones > Require Variable Declaration una vez para que se añada a cada módulo nuevo automáticamente.
Option Explicit ' <- siempre la primera linea del modulo
Sub Report()
Dim totalSales As Long
totalSales = 100
MsgBox totalSaies ' errata! Con Option Explicit: "Variable not defined" - no se ejecutara
End Sub ' Sin el: MsgBox muestra un blanco/0 y nadie se entera
Lo que aprenderás
- El modelo mental — VBA inventa una variable por cada nombre que tecleas
- El bug de la errata silenciosa, y cómo una sola línea acaba con toda su categoría
- Por qué es por módulo, y el ajuste que lo añade por ti
- Qué hacer cuando Variable not defined enciende tu código antiguo
- Por qué obliga a la declaración pero no a los tipos de datos (una confusión habitual)
- La opinión: el único ajuste que activar antes de escribir una línea
El modelo mental: VBA inventa variables a tus espaldas
Por defecto, VBA trata cualquier nombre que no ha visto nunca como una petición de crear una variable
nueva, al instante, de tipo Variant y con Empty dentro. Suena cómodo. Es una trampa. Significa que VBA
no puede distinguir entre una variable que querías usar y una que escribiste mal — ambas son solo «un
nombre que no ha visto», así que ambas se crean, en silencio.
Option Explicit elimina esa comodidad. Con él en lo alto del módulo, la regla se invierte: toda
variable debe declararse (con Dim, Private, Public, Static, Const o un parámetro) antes de usarla.
Teclea un nombre que nunca declaraste y el compilador se detiene con Variable not defined — antes de que
la macro se ejecute. Has cambiado un poco de tecleo por la promesa del compilador de que cada nombre de tu
código es uno que quisiste poner.
Tres tokens que la macro nunca ejecuta
Option Explicit pertenece a una pequeña familia: tres cosas que tecleas y que la macro en ejecución nunca
ejecuta. Dan forma al código fuente y a la compilación, no a la ejecución — y por eso los
principiantes se los saltan, y por eso saltárselos duele.
| Token | Qué le hace a tu código fuente | Qué le cuesta a la ejecución |
|---|---|---|
' comentario |
Deja notas y desactiva código que el compilador elimina | Nada — nunca se ejecuta |
_ continuación de línea |
Parte una instrucción larga en varias líneas | Nada — el parser lo borra |
Option Explicit |
Obliga a declarar todos los nombres | Se ejecuta en tiempo de compilación, así las erratas mueren antes de que arranque la macro |
Dos de los tres se borran antes de compilar; Option Explicit es el que actúa — le ordena al compilador
vigilar tus nombres. Es el de mayor rentabilidad de los tres, porque el bug que atrapa es el más caro: el
que produce una respuesta equivocada en lugar de un error.
El bug que elimina: la errata que devuelve cero
Este es todo el argumento a favor de Option Explicit en ocho líneas. Sin él:
Sub Totals()
Dim revenue As Currency
revenue = 5000
' ...cuarenta lineas mas tarde...
MsgBox "Revenue: " & revanue ' errata: revAnue
End Sub
revanue nunca se declaró, así que VBA la crea como un Variant vacío. El cuadro de mensaje muestra
Revenue: — en blanco — y no hay error, ni aviso, ni texto en rojo. En un informe de verdad eso es un
número equivocado entregado a alguien que se fía de él. Esta es la fuente más común de «mi macro da la
respuesta equivocada pero no se cae», y es completamente invisible hasta que alguien nota que el total no
cuadra.
Añade una línea y la misma errata se convierte en un muro que no puedes cruzar:
Option Explicit
Sub Totals()
Dim revenue As Currency
revenue = 5000
MsgBox "Revenue: " & revanue ' Compile error: Variable not defined (revanue resaltado)
End Sub
La macro ni siquiera arranca. El compilador resalta revanue y nombra el problema. Un arreglo de diez
segundos en lugar de un error silencioso ya entregado.
Es por módulo, así que deja que el ajuste lo añada por ti
Option Explicit protege solo el módulo en el que está. Añádelo a Module1 y Module2 sigue abierto
de par en par. Un módulo nuevo que insertes mañana no lo tiene. Confiar en ti mismo para teclearlo en lo
alto de cada módulo es exactamente el tipo de disciplina que falla el día ajetreado en que más lo necesitas.
Así que no confíes en ti mismo. En el editor de VBA abre Herramientas > Opciones > Editor y marca
Require Variable Declaration. A partir de ahí, cada módulo nuevo que insertes recibe Option Explicit en su primera línea automáticamente. Es un clic único que convierte el valor seguro en el valor
por defecto real — lo primero que configurar en cualquier máquina donde escribas VBA.
Una salvedad que conviene saber: ese ajuste solo afecta a los módulos creados después de marcarlo. Los módulos que ya existen conservan lo que tuvieran, así que a los módulos antiguos les sigues añadiendo la línea a mano.
Activarlo en código antiguo: el muro rojo es el objetivo
Añade Option Explicit a un módulo lleno de variables sin declarar y la primera compilación se enciende
como una centralita — Variable not defined en un nombre tras otro. No es que la directiva se ponga
difícil; es que te muestra cada lugar donde tu código antiguo iba a ciegas. Cada nombre resaltado es o bien
una variable que necesitas declarar o bien una errata que nunca cazaste.
Ve resolviéndolos uno a uno: declara los de verdad (Dim customerName As String — mira
VBA Dim para saber cómo) y corrige las erratas. Es tedioso una vez y seguro para
siempre. Si un módulo es enorme, añade la línea, compila y deja que el editor te lleve a cada nombre sin
declarar con Depurar > Compilar. No estás añadiendo trabajo; estás cobrando bugs que ya estaban ahí.
Obliga a declarar, no a fijar tipos de datos
Una lectura errónea frecuente: la gente cree que Option Explicit hace que VBA sea de tipado fuerte. No
es así. Te obliga a declarar una variable, pero una declaración sin tipo sigue siendo un Variant:
Option Explicit
Dim count ' legal bajo Option Explicit - pero es un Variant
Dim count As Long ' esto es lo que de verdad quieres - una variable con tipo
Dim count satisface a Option Explicit (el nombre está declarado) pero no te da nada de la velocidad ni
la seguridad de tipos de As Long. Option Explicit cierra el agujero del nombre sin declarar; elegir
tipos de verdad (As Long, As String, As Range) es un hábito aparte, igual de valioso, que se cubre en
VBA Data Types. Activa el primero, luego practica el segundo.
La opinión: este es el primer ajuste que debes activar
No hay ningún argumento honesto en contra de Option Explicit. El coste son unas pocas líneas Dim que
deberías escribir de todas formas; la recompensa es la inmunidad al bug que más tiempo hace perder en VBA —
la errata silenciosa que devuelve cero y se entrega. Todo desarrollador de VBA con experiencia activa
Require Variable Declaration en una máquina nueva antes de escribir nada, y trata un módulo sin Option Explicit como algo sin terminar.
Si te llevas una sola cosa de este grupo de guías, que sea esta: marca el ajuste ahora, añade la línea a los módulos que ya tienes, y no vuelvas nunca a pasarte una tarde persiguiendo un total equivocado que resulta ser una variable mal escrita. Es el seguro más barato del lenguaje.
Cuando la garantía que quieres es la macro entera, no una variable
Option Explicit garantiza que tus nombres son reales. No puede garantizar que tu lógica lo sea. Cuando
lo que está en juego es un número que verá un cliente, sigues queriendo algo que compruebe que el resultado
es correcto, no solo que las variables existen.
ExcelMaster toma un objetivo en
lenguaje natural —«concilia estas dos hojas y marca cada fila donde los totales no coincidan»— escribe el
código, respalda tu libro, lo ejecuta y te devuelve las filas que no pasan la comprobación. Tú describes el
resultado que esperas; él hace el trabajo y te muestra dónde se separan la realidad y la expectativa — un
nivel de seguridad que ninguna directiva por sí sola puede darte.
Preguntas frecuentes
¿Qué hace Option Explicit en VBA?
Te obliga a declarar cada variable antes de usarla. Con Option Explicit en lo alto de un módulo, cualquier
nombre que nunca declaraste dispara un error de compilación Variable not defined, así que las erratas y
las variables sin declarar se cazan antes de que la macro se ejecute en lugar de convertirse en silencio en
variants vacíos.
¿Dónde pongo Option Explicit?
En la primerísima línea de un módulo, por encima de cada Sub y Function, en la sección Declarations del
módulo. Aplica solo a ese módulo, así que va en lo alto de cada módulo que quieras proteger.
¿Cómo añado Option Explicit automáticamente?
En el editor de VBA, abre Herramientas > Opciones > Editor y marca Require Variable Declaration. VBA
inserta entonces Option Explicit en lo alto de cada módulo nuevo que crees. No lo añade a los módulos que
ya existen — esos los actualizas a mano.
¿Por qué me sale Variable not defined tras añadir Option Explicit?
Porque el módulo tiene variables que nunca declaraste — a menudo erratas, a veces nombres que simplemente
olvidaste poner en un Dim. El compilador resalta cada uno. Declara las variables de verdad (por ejemplo
Dim total As Long) y corrige las mal escritas; cada error es un bug latente que la directiva acaba de
dejar al descubierto.
¿Option Explicit obliga a fijar tipos de datos?
No. Obliga a la declaración, no al tipado. Dim count lo satisface pero sigue siendo un Variant. Para
conseguir seguridad de tipos y velocidad añades tú un tipo — Dim count As Long — que es un buen hábito
aparte.
Probado en
Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 06/09/2026.
Guías relacionadas: VBA Comment · VBA Line Continuation · VBA Dim · VBA Data Types · VBA Debug.Print
