¿Ya dominas lo básico? Un curso estructurado de VBA es la vía rápida para dar el salto.
Ver cursos de VBA en UdemyEnlace de afiliado. No te cuesta nada extra.
- 01Preparar el entorno (lo que necesitas)
- 02Tu primera salida (MsgBox)
- 03Declarar variables (Dim)
- 04Condicionales (la sentencia If)
- 05Repetir (la sentencia For)
- 06Repetir (la sentencia Do While)
- 07Escribir un procedimiento Sub
- 08Procedimientos Function (trabajo que devuelve un valor)
- 09Leer y escribir celdas (Range y Cells)
- 10Trabajar con arrays
- 11Trabajar con texto
- 12La sentencia With
- 13Variables de objeto y trabajo con hojas
- 14Recorrer elementos (For Each)
- 15Manejo de errores (On Error)
- 16La sentencia Select Case
- 17Argumentos (ByVal y ByRef)
- 18Trabajar con colecciones (Collection)
- 19Grabar macros y procedimientos de evento
- 20[Proyecto] Construye una hoja de inventario
Argumentos (ByVal y ByRef)
En esta lección verás la diferencia entre pasar una copia de un valor y pasar la variable misma.
ByVal pasa una copia: lo que el procedimiento haga con ella no afecta al original. ByRef pasa la variable en sí, de modo que modificarla dentro cambia también la de fuera.
El código de ejemplo pasa un número por referencia y lo duplica dentro del procedimiento; al volver, la variable original ya vale el doble.
Y aquí está lo importante, y es la causa de errores muy desconcertantes: en VBA, si no escribes nada, el argumento es ByRef. Casi todos los lenguajes modernos hacen lo contrario. Eso significa que un procedimiento puede cambiar tus variables sin que la llamada lo insinúe siquiera.
La recomendación práctica es escribir ByVal de forma explícita salvo cuando de verdad quieras modificar el original. Cuesta una palabra y evita que una macro grande cambie valores a distancia sin que nadie lo espere. Cuando veas un ByRef escrito a propósito, entiendes que la modificación es intencionada.
🧪 Este sitio no puede compilar ni ejecutar VBA directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).
