En ocasiones tenemos macros desarrolladas en VBA que no sabemos si van a ser utilizadas en versiones Office de 32 o de 64 bits. Aquí te explico cómo hacer que tu código funcione en ambas versiones y así tener código VBA compatible para office 32 bits y 64 bits.
Causas de incompatibilidad
En principio, el código VBA debería ser compatible para versiones de 32 bits y 64 bits salvo que:
- Llamemos a funciones externas
- Usemos controles ActiveX que no estén disponibles en 64 bits
Llamadas a funciones externas
La típica llamada a funciones externas API, que en 32 bits se hace con una instrucción “Public Declare Function…” no funcionará en la versión de 64 bits. Esto se debe a que hay tipos de datos diferentes en ambas versiones.
Para que esta llamada a función funcione en 64 bits, la misma debe incluir la palabra clave PtrSafe entre Declare y Function, es decir, la llamada debe hacerse como “Public Decalre PtsSafe Fucntion …”
Con este cambio, conseguiremos que nuestro código funcione en 64 bits… pero no en 32 bits.
La compatibilidad la conseguiremos haciendo que la llamada a la función sea una u otra dependiendo de que sistema estemos usando. Y para ello, tendremos que utilizar una función If con almohadilla delante. Es decir, nuestro código de llamada a función deberá ser:
#If VBA7 And Win64 Then
Public Declare PtsSafe Function …
#else
Public Declare Function …
#end if
Controles ActiveX
Hay controles ActiveX disponibles en la versión VBA de 32 bits que no son compatibles en versión 64 bits. Este caso tiene una peor solución (o más bien, ninguna). Para este caso, habrá que buscar alternativas diferentes y rehacer la parte del programa necesaria.
Los controles ActiveX de las librerías MSComCtl y MSComCt2 no están disponibles en 64 bits. Estos comprenden:
- MSComCtl: TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox
- MSComCt2: Animation, UpDown, MonthView, DateTimePicker, FlatScrollBar
Puedes encontrar mas información en https://learn.microsoft.com/es-es/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office
Control calendario
Tampoco es compatible el control calendario ubicado en la librería MSCAL.OCX y si quieres ejecutar algún código VBA que utilice este control en sus formularios te saldrá el error correspondiente. Esto, en cambio, tiene una solución relativamente sencilla que tenemos que agradecer a Roberto Mensa, Gábor Madács y Krisztina Szabó que se han tomado la molestia de desarrollar de forma desinteresada una clase para sustituir este control y que puedes descargar desde Clase Calendario donde también encontrarás las instrucciones para su implementación. Te aseguro que lo he usado en varios libros Excel donde usaba el control calendario y funciona perfectamente.

Conclusión
El tener un código VBA compatible para office 32 bits y 64 bits no resulta tan difícil como pueda parecer a primera vista. Puede ocasionarnos algún pequeño trastorno el modificar aquellos desarrollos que tengamos, pero siendo cada vez mas frecuente encontrarse con instalaciones de Office de 64 bits es un trabajo que merece la pena, especialmente si dichos desarrollos los usas en mas de un ordenador o son utilizados por diferentes usuarios.
Si te ha resultado interesante, quizás también quieras ver otros artículos sobre VBA