Si tienes Excel para Mac y has visto un tutorial de macros con la etiqueta VBA, este artículo es para ti. VBA (Visual Basic para Applications) es el lenguaje de programación que lleva Excel dentro y que permite automatizar tareas con macros. En Mac funciona, pero hay partes que se comportan de forma distinta al PC: algunos controles y objetos de Windows no existen, y ciertas macros fallan al abrirlas en el otro sistema. Al terminar, sabrás activar la pestaña Programador, abrir el editor, escribir tu primera macro y dejarla lista para que funcione tanto en Mac como en Windows. Lo que aquí se explica sirve para Excel para Microsoft 365, Excel 2024, Excel 2021 y Excel 2019 en Mac.
Qué es VBA en Mac y por qué tu código de Windows puede no funcionar ahí
VBA es el motor de macros que Excel lleva integrado desde los años noventa. Existe en Excel para Mac y en Excel para Windows, y la mayoría del lenguaje se comporta igual en los dos sistemas: las mismas instrucciones (Sub, End Sub, Dim, For, If), el mismo modelo de objetos (Workbook, Worksheet, Range, Cells) y los mismos UserForms.
La diferencia está en lo que VBA usa para «hablar» con el sistema operativo. En Windows, VBA puede cargar objetos COM (ActiveX), llamar a librerías DLL y leer el registro. En Mac, VBA no tiene acceso a ninguna de esas tres cosas: macOS las bloquea porque Excel corre dentro de un entorno protegido (sandbox). El caso típico: copias un .xlsm desde un PC con una macro que usa CreateObject("WScript.Shell") y, al abrirlo en Mac, VBA lanza el error 429 «ActiveX component can't create object». La macro no está mal escrita; es que la pieza que pide no existe en Mac.
Lo que tienes delante: la pestaña Programador y el editor de Visual Basic
En Mac, la pestaña Programador viene oculta por defecto. El camino para mostrarla es algo distinto al de Windows: en Mac se hace desde el menú Excel, no desde Archivo.
Activar Programador y abrir el editor por primera vez
- Abre Excel para Mac y ve al menú Excel (no Archivo) y elige Preferencias.
- En la ventana de Preferencias, pulsa Cinta y barra de herramientas.
- En la lista de la derecha, marca la casilla Programador.
- Cierra Preferencias. La pestaña Programador aparece a la derecha de Vista.
- Pulsa
Opt+F11(en Windows sería Alt+F11) para abrir el editor de Visual Basic. También puedes ir a Programador > Código > Editor de Visual Basic.
Al abrirlo verás una ventana con el Explorador de proyectos a la izquierda (muestra los libros abiertos y sus hojas) y una zona grande a la derecha en blanco: ahí se escriben las macros.
Opt+F11, y dentro del editor F5 ejecuta la macro y F8 la ejecuta paso a paso.Insertar un módulo y escribir tu primer Sub
- En el editor, ve al menú Insertar y elige Módulo.
- En la zona en blanco escribe este código:
Sub Hola()
Range("A1").Value = "Hola"
MsgBox "Listo"
End Sub
- Pulsa F5. Vuelve a la hoja de Excel y verás la celda A1 con el texto «Hola», y antes un cuadro con el mensaje «Listo».
Lo que VBA en Mac hace igual que en Windows
El corazón de VBA es el modelo de objetos, y esa parte es idéntica en los dos sistemas. Sirve la jerarquía: Application (Excel) contiene Workbooks (libros), cada libro contiene Worksheets (hojas), y cada hoja tiene Range (rangos) y Cells (celdas sueltas). Los UserForms, los eventos de hoja (Worksheet_SelectionChange, Workbook_Open) y los cuadros MsgBox e InputBox funcionan igual.
En este artículo vamos a usar el libro Ventas: una hoja con productos, precio y cantidad, donde VBA calcula el total por fila.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | |
| 3 | Cuaderno | 3,20 | 5 | |
| 4 | Goma | 0,80 | 12 |
Mover datos con Range, Cells, .Value y .FormulaLocal
Con .Value escribes o lees el valor de una celda. Con .FormulaLocal escribes una fórmula en el idioma del usuario (español, con punto y coma). En Mac las dos funcionan.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | 15,00 |
| 3 | Cuaderno | 3,20 | 5 | 16,00 |
| 4 | Goma | 0,80 | 12 | 9,60 |
La macro equivalente, escrita con Cells(fila, columna):
Sub CalcularTotales()
Dim i As Long
For i = 2 To 4
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i
End Sub
Y la versión con fórmula, usando .FormulaLocal para que la fórmula quede en español y con punto y coma:
Sub PonerFormula()
Range("E2").FormulaLocal = "=SUMA(A2:D2)"
Range("E3").FormulaLocal = "=SUMA(A3:D3)"
Range("E4").FormulaLocal = "=SUMA(A4:D4)"
End Sub
Range("E2").FormulaLocal = "=SUMA(A2:D2)" se convierte en =SUM(A2:D2) solo en .Formula; .FormulaLocal se adapta al idioma..Formula en vez de .FormulaLocal, tienes que escribir la fórmula en inglés y con coma: Range("E2").Formula = "=SUM(A2:D2)". Escribir =SUMA(...) en .Formula da el error 1004 en tiempo de ejecución.Lo que VBA en Mac no puede hacer y te dará error
Hay una lista corta de cosas que VBA en Windows hace y VBA en Mac no. No es un fallo de tu código, es que macOS no expone esas piezas a Excel.
| Función de VBA en Windows | Qué pasa en Mac | Motivo |
|---|---|---|
| Controles ActiveX en hojas | El menú Insertar no los muestra | macOS no aloja controles ActiveX dentro de Excel |
CreateObject("WScript.Shell") |
Error 429 «ActiveX component can't create object» | No hay objetos COM en el sandbox de macOS |
Declare Function ... Lib "kernel32" |
Error de compilación | No hay DLLs de Windows |
Acceder al registro con SaveSetting / GetSetting |
La función existe pero no encuentra el registro | El registro de Windows no existe en macOS |
Application.InputBox(Type:=8) para un rango |
Devuelve una cadena, no un rango | La captura de rango con ratón no funciona en Mac |
Controles ActiveX: por qué el menú Insertar de Mac no los tiene
En el editor de VBA, el menú Insertar ofrece dos cosas distintas: UserForm y Módulo. Los controles ActiveX (botones, cuadros de texto, listas) solo aparecen al diseñar un UserForm, y aun así en Mac aparecen los «controles de formulario», no los ActiveX. Si abres un libro hecho en Windows con un botón ActiveX en una hoja, el botón se ve como una imagen estática: no se puede pulsar ni se le puede asignar una macro.
Mac no tiene COM, registro ni DLLs de Windows
macOS aísla cada aplicación en un entorno cerrado (sandbox). Excel para Mac no puede cargar componentes COM, no puede abrir una DLL de Windows y no puede escribir ni leer el registro del sistema porque ese concepto no existe. Las llamadas equivalentes en Mac pasan por AppleScript o por comandos bash lanzados con Shell, que sí funcionan, pero no son objetos COM. Por eso CreateObject("WScript.Shell") devuelve el error 429: VBA no encuentra la pieza que le pides.
Escribir VBA que valga en Mac y en Windows a la vez
La buena noticia es que casi todo tu código VBA habitual funciona en Mac sin tocarlo. La excepción son los dos puntos anteriores. Para esos casos, VBA trae una compilación condicional con Mac que te permite escribir dos versiones del mismo bloque: una para Mac, otra para Windows.
La macro con el bloque #If Mac Then…#Else
Esta macro lee la columna A de la hoja Ventas, junta los productos en un texto y lo guarda en un archivo .txt junto al libro. La ruta se construye con Application.PathSeparator, que vale para ambos sistemas.
Sub GuardarListado()
Dim ruta As String
Dim i As Long
Dim contenido As String
Dim archivo As Integer
contenido = ""
For i = 2 To 4
contenido = contenido & Cells(i, 1).Value & ";" & _
Cells(i, 2).Value & ";" & _
Cells(i, 3).Value & Chr(10)
Next i
#If Mac Then
ruta = Application.DefaultFilePath & Application.PathSeparator & "listado.txt"
#Else
ruta = ThisWorkbook.Path & Application.PathSeparator & "listado.txt"
#End If
archivo = FreeFile
Open ruta For Output As #archivo
Print #archivo, contenido
Close #archivo
MsgBox "Guardado en: " & ruta
End Sub
ThisWorkbook.Path devuelve la ruta del libro solo si está guardado como .xlsm en una carpeta local. Si abres el archivo desde OneDrive o desde una carpeta sincronizada, puede llegar vacía. Por eso en Mac se usa Application.DefaultFilePath, que apunta a la carpeta Documentos.Sustituir ActiveX por controles de formulario
En vez de insertar un botón ActiveX, usa un control de formulario, que sí funciona en Mac y en Windows.
- En la hoja Ventas, ve a Programador > Controles > Insertar.
- Elige el primer icono de la fila inferior: Botón (control de formulario).
- Dibuja el botón en la celda F1.
- Al soltar, aparece el cuadro Asignar macro; elige
GuardarListadoy pulsa Aceptar.
listado.txt contiene los tres productos separados por ;.Crear un UserForm en Mac cuando el menú no te deja
En el editor de VBA para Mac, el menú Insertar > UserForm no aparece en todas las versiones. Está disponible desde Excel 16.53 para Mac (lanzada en 2020), que equivale a Excel 2021 en Windows. Si tu versión es anterior, el menú Insertar solo ofrece Módulo y Procedimiento. La solución es crear el UserForm por código, con CreateObject, después de marcar dos referencias concretas en el editor.
Las dos referencias que tienes que marcar
- En el editor de VBA, ve al menú Tools y elige References.
- Marca Microsoft Forms 2.0 Object Library.
- Marca Microsoft Visual Basic for Applications Extensibility 5.3.
- Pulsa Aceptar y vuelve al módulo.
El código mínimo para crear el UserForm por código
Esta macro crea un formulario con un cuadro de texto y un botón Aceptar, lo muestra y, al cerrarlo, escribe lo que escribió el usuario en la celda G1.
Sub CrearFormulario()
Dim frm As Object
Set frm = CreateObject("Forms.Form.1")
frm.Caption = "Venta rápida"
frm.Width = 200
frm.Height = 120
Dim txt As Object
Set txt = frm.Controls.Add("Forms.TextBox.1")
txt.Name = "txtProducto"
txt.Left = 10
txt.Top = 10
txt.Width = 150
Dim btn As Object
Set btn = frm.Controls.Add("Forms.CommandButton.1")
btn.Name = "btnAceptar"
btn.Caption = "Aceptar"
btn.Left = 10
btn.Top = 50
btn.Width = 80
frm.Show
Range("G1").Value = frm.Controls("txtProducto").Value
Unload frm
End Sub
CrearFormulario se abre una ventana con el título «Venta rápida», un cuadro de texto y un botón Aceptar. Al escribir algo y cerrar, la celda G1 contiene ese texto.Por qué el editor te borra espacios y se come letras al escribir
Un fallo muy común en Mac: al escribir código en el editor de VBA, los espacios desaparecen o las letras se borran solas al pulsar Entrar o al volver a una línea. El editor de VBA de Mac tiene un corrector en tiempo de ejecución que entra en conflicto con ciertas configuraciones.
La causa más habitual, según la documentación de Microsoft, es que el archivo .xlsm está abierto desde una carpeta sincronizada en la nube (OneDrive, iCloud Drive, Dropbox, Google Drive). El editor y el cliente de sincronización escriben a la vez y se pisan. La solución es descargar el archivo al disco local.
Cuando OneDrive es el culpable: descarga el .xlsm al Mac
- Cierra el libro en Excel y cierra el editor de VBA.
- En Finder, ve a la carpeta de OneDrive donde está el archivo.
- Clic derecho sobre el archivo .xlsm y elige Descargar de OneDrive (la opción exacta puede variar según la versión del cliente; también puede aparecer como Mantener siempre en este dispositivo).
- Abre la copia local desde Finder (doble clic) y vuelve al editor de VBA.
- Escribe código de prueba y comprueba que los espacios se mantienen.
Si el problema no es OneDrive: limpia la barra y repara el disco
- En el editor, ve a Ver > Barras de herramientas y desmarca Herramientas de VBA si está activada; esta barra colisiona con algunos atajos del editor en Mac.
- En Herramientas > Opciones > Editor, desactiva la casilla Comprobación automática de sintaxis para evitar que el editor reformatee tu código al pulsar Entrar.
- Si sigue fallando, abre Utilidad de Discos (Aplicaciones > Utilidades), selecciona tu disco y pulsa Primeros auxilios. Un disco con errores de escritura puede provocar que el editor pierda caracteres.
Guardar y abrir tu libro con macros en Mac
Un libro con macros se guarda con la extensión .xlsm (Libro de Excel habilitado para macros). Si lo guardas como .xlsx, Excel borra las macros sin avisarte.
- Ve a Archivo > Guardar como.
- En el formato, elige Libro de Excel habilitado para macros (.xlsm).
- Escribe el nombre y pulsa Guardar.
Para abrirlo después, doble clic desde Finder. Si Excel lo abre en vista protegida, pulsa Habilitar contenido en la franja amarilla de arriba: las macros de un archivo descargado de internet se bloquean hasta que lo habilitas manualmente.
Lo que ya sabes hacer con VBA en Mac y tu siguiente paso
- Ya activas la pestaña Programador desde Excel > Preferencias > Cinta y barra de herramientas.
- Ya abres el editor con
Opt+F11y ejecutas macros con F5. - Ya escribes fórmulas en español con punto y coma usando
.FormulaLocal, y entiendes que.Formulaexige inglés y coma. - Ya sabes que ActiveX, COM, DLLs y el registro de Windows no existen en Mac, y que
.InputBox Type:=8falla. - Ya escribes código compatible con
MacyWindowsusando el bloque#If Mac Then … #Else … #End If. - Ya creas un UserForm por código cuando el menú Insertar no te lo ofrece.
Siguiente paso: prueba tu .xlsm en Windows. La forma más fiable es abrirlo en una máquina virtual con Parallels o VMware Fusion que tenga Excel 2021 o 2024 instalado, o pedirle a un compañero con PC que ejecute la macro y te confirme el resultado. Si funciona en los dos, tu código es portable.
Dudas al usar VBA en Excel para Mac
1. ¿Cuál es el atajo para abrir VBA en Excel para Mac?
En Mac no existe un atajo directo de teclado para abrir el editor de VBA, así que tienes que ir a Programador > Editor de Visual Basic o usar el menú Desarrollador. La pestaña Programador viene oculta por defecto y se activa en Excel > Preferencias > Barra de herramientas y cinta > Pestaña Programador.
2. ¿Cómo abro el editor de VBA en Excel para Mac?
Primero activa la pestaña Programador en Excel > Preferencias > Barras y cinta, márcala y acepta. Después, dentro de la hoja, pulsa Programador > Editor de Visual Basic y se abrirá la ventana con el Explorador de proyectos a la izquierda, lista para escribir macros.
3. ¿Puedo usar el editor de VBA de Mac también en PowerPoint?
Sí, el editor de VBA está disponible en PowerPoint para Mac con la misma mecánica: activa la pestaña Programador en PowerPoint > Preferencias > Barras y cinta, pulsa Programador > Editor de Visual Basic y trabajarás con proyectos VBA del archivo de PowerPoint abierto.
4. ¿Cómo activo la pestaña Programador en Excel para Mac?
Abre Excel, ve al menú Excel > Preferencias y entra en Barras y cinta. En la lista de la derecha, marca Programador, pulsa Guardar y ciérralo. La pestaña aparecerá a la derecha de la cinta, con los botones Visual Basic, Macros y Grabar macro.
5. ¿Cómo inserto código VBA en un libro de Excel?
Abre el editor con Programador > Visual Basic, en el Explorador de proyectos haz doble clic en el módulo donde quieras pegarlo (Módulo1 si acabas de crear uno con Insertar > Módulo) y pega el código entre Sub y End Sub. Para ejecutarlo, vuelve a Excel y pulsa Programador > Macros > Ejecutar.
6. ¿Cómo se abre VBA en Excel?
En Windows, pulsa Alt+F11 o ve a Programador > Visual Basic. En Mac, como el atajo Alt+F11 no funciona, tienes que activar antes la pestaña Programador en Excel > Preferencias > Barras y cinta y luego abrir el editor desde Programador > Visual Basic.
7. ¿Cómo empiezo a usar VBA en Excel?
Empieza activando la pestaña Programador, graba una macro sencilla con Programador > Grabar macro y observa el código que se genera en Módulo1; ese código es la mejor forma de aprender la sintaxis. A partir de ahí, edítalo en el editor y prueba paso a paso con F8 para ejecutarlo línea a línea.
Fuentes
- MicrosoftVBA forms and coding for the MAC in Excel – Microsoft Learnconsultado el 06/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 06/10/2026
- MicrosoftExcel para Mac — documentación oficialconsultado el 06/10/2026
- MicrosoftLAMBDA — documentación oficialconsultado el 06/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 06/10/2026