🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Line Continuation en Excel — el guion bajo, sus reglas y la trampa de las cadenas

|

VBA Line Continuation en Excel — el guion bajo, sus reglas y la trampa de las cadenas

TL;DR — Termina una línea con un espacio y un guion bajo _ y VBA tratará la siguiente línea física como parte de la misma instrucción. El parser borra el _ y une las líneas antes de compilar, así que solo cambia cómo se lee tu código — nunca lo que se ejecuta. Tres reglas hacen tropezar a todo el mundo: el espacio antes del _ es obligatorio, nada (ni siquiera un comentario) puede ir detrás, y no puedes partir dentro de una "string" — cierras la comilla, añades & _ y continúas.

' Una instruccion logica, repartida en tres lineas legibles
Workbooks.Open Filename:="C:\Reports\Q3.xlsx", _
               ReadOnly:=True, _
               UpdateLinks:=False

' Una cadena larga: cierra la comilla, une con & _, continua
MsgBox "The report finished at " & _
       Format(Now, "hh:mm") & " with no errors."

Lo que aprenderás

  • El modelo mental — un token de código que el parser borra antes de compilar
  • Los tres tokens que solo viven en el código, y dónde encaja la continuación entre ellos
  • El espacio obligatorio, y por qué nada puede ir detrás del guion bajo
  • La trampa de las cadenas — por qué no puedes partir dentro de las comillas
  • Por qué un comentario mata en silencio una continuación
  • El guion bajo frente a los dos puntos — partir una instrucción frente a unir muchas
  • La opinión: la continuación es para humanos, así que úsala como tal

El modelo mental: un token que el parser borra

VBA no tiene límite de longitud de línea — una instrucción puede medir 500 caracteres y ejecutarse a la perfección. Así que el carácter de continuación de línea existe por una sola razón: . Un espacio seguido de un guion bajo _ al final de una línea le dice al parser: «esta instrucción no ha terminado; la siguiente línea física la continúa». Antes de que el compilador vea siquiera tu código, el parser elimina el _, pega las líneas y compila una única instrucción lógica.

Ese es todo el modelo mental, y explica cada regla de abajo. Como el _ es un token de disposición del código que se consume antes de la compilación, tiene que ir donde el parser espera que la instrucción haga una pausa — en un corte natural, con un espacio delante y con verdaderamente nada detrás. Es puntuación para quien lee, no una instrucción para la máquina.

Tres tokens que la macro nunca ejecuta

La continuación de línea es una de las 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:

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 antes de compilar
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

El comentario y la continuación se borran ambos antes de compilar — puro formato del código. Esa naturaleza compartida es también por lo que chocan, como muestra la trampa del comentario más abajo.

Regla 1: un espacio antes del guion bajo, nada después

La continuación son dos caracteres en un orden fijo — espacio, luego guion bajo — y debe ser lo último de la línea.

' CORRECTO - espacio antes del _, y termina la linea
total = price + _
        tax

' INCORRECTO - sin espacio antes del guion bajo
total = price +_
        tax                ' Compile error / unexpected token

' INCORRECTO - algo despues del guion bajo (incluso un comentario)
total = price + _ ' suma el impuesto
        tax                ' Expected: end of statement

Omite el espacio y +_ se lee como un solo token; pon cualquier cosa después del _ — un espacio suelto está bien, pero un comentario o código no — y VBA informa de Expected: end of statement. El arreglo es mecánico: _ va justo al final, y la explicación va en su propia línea encima.

Regla 2: no puedes partir dentro de una cadena

Esta es la trampa que trae a la gente aquí. Un guion bajo dentro de una cadena entrecomillada es solo un guion bajo literal — es texto, no una continuación. Así que no puedes ajustar una cadena larga metiendo un _ en medio:

' ROTO - el _ es texto literal dentro de las comillas
MsgBox "This is a very long message _
        that keeps going"       ' la cadena nunca se cierra -> compile error

' CORRECTO - cierra la comilla, concatena con & _, continua en la linea siguiente
MsgBox "This is a very long message " & _
       "that keeps going"

Para partir una cadena larga cierras la comilla, añades & _ (concatenación, luego continúa) y abres una comilla nueva en la línea siguiente. Vigila el espacio final dentro de la primera comilla — "message " & conserva el espacio que el salto de línea escondería si no. Este único patrón — " ... " & _ — cubre el noventa por ciento del uso real de la continuación, porque las cadenas largas (mensajes, SQL, rutas) son lo que más necesita ajustarse.

Regla 3: un comentario mata una continuación

Como un comentario y una continuación son ambos tokens que solo viven en el código, no pueden compartir una línea. Un apóstrofo termina la instrucción lógica, así que un _ que viene después de un ' está dentro del comentario y no hace nada:

' ROTO - el comentario se traga la continuacion
total = price _  ' precio base
      + tax       ' "+ tax" es ahora su propia instruccion rota

' CORRECTO - comentario en su propia linea, encima de la instruccion
' precio base mas impuesto
total = price _
      + tax

El síntoma es el mismo Expected: end of statement en la línea siguiente, apuntando al lugar equivocado. La regla es simple en cuanto te topas con ella una vez: nunca pongas un comentario en una línea continuada — súbelo a una línea propia. (La guía de comentarios cubre esta colisión desde el otro lado.)

El guion bajo frente a los dos puntos: herramientas opuestas

El _ parte una instrucción en muchas líneas. Los dos puntos : hacen justo lo contrario — unen muchas instrucciones en una línea:

' Dos puntos: tres instrucciones apretadas en una linea fisica
x = 1 : y = 2 : z = 3

' Guion bajo: una instruccion relajada en tres lineas
result = Application.WorksheetFunction.SumIfs( _
             data, keys, criteria)

Se confunden constantemente porque ambos tienen que ver con los límites de línea, pero tiran en direcciones opuestas. Recurre a _ para hacer legible una instrucción larga; sé parco con : — apiñar instrucciones en una línea las esconde de los breakpoints y de cualquiera que lea el código, así que limítalo a parejas triviales como mucho. Una herramienta sirve a quien lee; la otra normalmente no sirve a nadie.

La opinión: la continuación es para humanos, así que úsala como tal

_ se gana su sitio exactamente en las líneas que a un humano le cuesta leer en una pantalla: un Workbooks.Open con seis argumentos con nombre, una condición If con cuatro cláusulas And, un SumIfs con una docena de rangos, una cadena SQL o de conexión construida a trozos. Parte esas por sus juntas naturales — después de una coma, antes de un operador, antes de cada And — y la estructura de la instrucción se vuelve visible.

Pero la continuación es una herramienta de legibilidad, no una virtud en sí misma. Ajustar una línea corta sin motivo, o continuar una instrucción quince veces, cambia un tipo de ilegible por otro (VBA incluso limita una instrucción a unas dos docenas de continuaciones). La prueba es honesta y simple: ¿hace el corte que la instrucción sea más fácil de leer para una persona? Si es que sí, úsalo; si no, deja la línea en paz. A la máquina nunca le importó ni en un sentido ni en otro.

Cuando la línea larga es un síntoma, no el problema

A veces una instrucción es larga porque la tarea es genuinamente compleja — llamadas anidadas a WorksheetFunction, criterios que se extienden sin fin, una fórmula ensamblada en código. La continuación de línea la hace legible, pero no la hace simple, y una instrucción de 200 caracteres partida en ocho líneas sigue siendo difícil de acertar. ExcelMaster te deja enunciar el resultado en lugar de ensamblar la instrucción a mano —«suma las ventas donde la región sea Oeste y la fecha esté en el Q3»— y escribe y ejecuta el código por ti, respaldando tu archivo primero. La línea larga deja de ser tu problema, porque nunca tienes que teclearla.

Preguntas frecuentes

¿Cuál es el carácter de continuación de línea en VBA?

Un espacio seguido de un guion bajo _ al final de una línea. Le dice a VBA que la instrucción continúa en la siguiente línea física. El parser quita el guion bajo y une las líneas en una sola instrucción antes de compilar, así que solo cambia cómo se dispone el código.

¿Por qué no funciona mi continuación de línea en VBA?

Normalmente por una de tres razones: no hay espacio antes del guion bajo, algo (a menudo un comentario) va detrás del guion bajo, o intentaste partir dentro de una cadena entrecomillada. El _ debe ser el último carácter de la línea, con un espacio delante, y las cadenas se parten con " ... " & _, no rompiendo a mitad de comilla.

¿Cómo continúo una cadena larga en varias líneas en VBA?

Cierra la cadena con una comilla, añade un espacio, un ampersand y la continuación — & _ — y luego abre una comilla nueva en la línea siguiente: "first part " & _ y después "second part". No puedes poner el guion bajo dentro de las comillas, porque ahí es solo un guion bajo literal.

¿Puedo poner un comentario en una línea continuada en VBA?

No. Un apóstrofo termina la instrucción lógica, así que un _ después de un comentario no hace nada y la línea siguiente se rompe. Pon el comentario en su propia línea encima de la instrucción continuada en su lugar.

¿Cuál es la diferencia entre el guion bajo y los dos puntos en VBA?

El guion bajo _ parte una instrucción en varias líneas para hacerla legible. Los dos puntos : hacen lo contrario — unen varias instrucciones en una línea física. Usa _ para hacer legibles las instrucciones largas; evita : salvo para parejas triviales, ya que esconde las instrucciones de los breakpoints y de quien lee.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 06/09/2026.

Guías relacionadas: VBA Comment · VBA Option Explicit · VBA MsgBox · VBA If Then Else · VBA Dim