Herramientas

Usar macros de 32 bits en Excel de 64 bits

Aún es habitual encontrarse con macros de VBA en los que se accede a funciones exportadas por DLLs de 32 bits. Al intentar ejecutar algunas de estas macros en las versiones actuales de Microsoft Office de 64 bits se obtiene un error de compilación. Provocando un problema cuando se necesita estas alguna de esas funcionalidades. Afortunadamente existe un truco sencillo para poder usar las macros de 32 bits en Excel de 64 bits, o el resto de las aplicaciones de Office, evitando estos errores de compilación.

El problema con las macros de 32 bits en Excel de 64 bits

Las macros de VBA, los tradicionales macros que se usan en Excel y el resto de las aplicaciones de Office, pueden integrar llamadas a funciones de DLLs del sistema. Para lo que solamente se debe usar la palabra clave Declare. Algo con lo que se puede acceder a múltiples funcionalidades que no existen en VBA, mejorando de este modo las capacidades de los macros.

El problema aparece cuando la versión de la librería a la que se llama es de 32 bits y el código se ejecuta en Office de 64 bits. En este caso los tipos de datos no son compatibles y se producirá un error de compilación. Para solucionar esto solamente se tiene que agregar la palabra clave PtrSafe antes de importar la función. Así para importar una importación como la siguiente

Declare Function WaitForSingleObject Lib "Kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

se debería cambiar por

Declare PtrSafe Function WaitForSingleObject Lib "Kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Lo que evitará los errores de compilación.

El efecto de la palabra PtrSafe

Al agregar la palabra reservada PtrSafe a una intrusión Declare lo que se hace es indicar al compilador que se va a trabajar con una versión de 64 bits. Provocando que todos los datos se pasen a almacenar con valores de 64 bits, incluyendo los valores devueltos y los parámetros. Por lo que el código ya no se podrá ejecutar en versiones de 32 bits. Algo que también puede ser un problema, ya que es posible que esa macro la esté usando un compañero en un ordenador donde la versión de office no está actualizada.

Mantener la compatibilidad entre versiones de 32 y 64 bits

En el caso de que se desee que el mismo macro funciones en tanto en versiones de Excel tanto de 32 como de 64 bits se puede recurrir a directivas de compilación. Esto es, indicarle al compilador que use una u otra versión en función de donde se esté ejecutando el macro. Para lo que solamente hay que recurrir a una estructura if-else precedidas de una almohadilla (#). Esto es, se puede usar el siguiente código.

#If Win64 Then
    Declare PtrSafe Function WaitForSingleObject Lib "Kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
#Else
    Declare Function WaitForSingleObject Lib "Kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
#End If

Por lo que este macro funcionará tanto en una instalación de Office de 32 como de 64 bits.

Conclusiones

En esta ocasión se ha visto cómo se puede solucionar los problemas de las macros de 32 bits en Excel de 64 bits. Manteniendo al mismo tiempo la compatibilidad con las versiones de 32 bits. Para ello hay que usar las directivas de compilación y la palabra clave PtrSafe.

Imagen de Kadres en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: ExcelOffice

Recent Posts

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

3 días ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

5 días ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

1 semana ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

2 semanas ago

Curiosidad: La Paradoja de Simpson, o por qué no siempre debes fiarte de los promedios

En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…

2 semanas ago

Copias de seguridad automáticas en SQL Server con rotación de archivos

Las bases de datos son el corazón de casi cualquier sistema de información moderno. Ya…

3 semanas ago

This website uses cookies.