Vous êtes sur la page 1sur 7

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

1 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

Compatibilidad entre versiones de 32 y 64 bits de


Office 2010
Office 2010

Resumen: para clientes que trabajan con 2GB o ms de datos, Microsoft Office 2010 ahora se encuentra disponible en una versin de 64 bits. En este
artculo se tratan problemas sobre la compatibilidad de la versin de 32 bits con la nueva versin de 64 bits y aplicaciones heredadas de Office de 32 bits
y sus soluciones (7 pginas impresas).
ltima modificacin: viernes, 24 de abril de 2015
Hace referencia a: Excel 2010| Office 2007| Office 2010| Open XML| PowerPoint 2010| SharePoint Server 2010| VBA| Visual Basic for Applications 7.0
(VBA 7.0)| Word 2010
En este artculo
Introduccin a las versiones de 32 y 64 bits de Microsoft Office 2010
Comparacin de los sistemas de 32 bits con los de 64 bits
Introduccin a la base de cdigo VBA 7
Compatibilidad de controles ActiveX y complementos COM
Compatibilidad de la interfaz de programacin de aplicaciones
Uso de atributos de compilacin condicional
Preguntas ms frecuentes
Conclusin
Recursos adicionales
Applies to:Microsoft Office 2010
Publicado:marzo de 2010
Proporcionado por:Microsoft Corporation
Contenido
Introduccin a las versiones de 32 y 64 bits de Microsoft Office 2010
Comparacin de los sistemas de 32 bits con los de 64 bits
Introduccin a la base de cdigo VBA 7
Compatibilidad de controles ActiveX y complementos COM
Compatibilidad de la interfaz de programacin de aplicaciones
Uso de atributos de compilacin condicional
Preguntas ms frecuentes
Conclusin
Recursos adicionales

Introduccin a las versiones de 32 y 64 bits de Microsoft Office 2010


Microsoft Office 2010 se encuentra disponible en versiones tanto de 32 como de 64 bits. La versin de 64 bits permite trabajar con conjuntos de datos
mucho mayores. Esto cobra especial relevancia cuando se trabaja con nmeros grandes en Microsoft Excel 2010.
Con la introduccin de la nueva versin de 64 bits de Microsoft Office 2010, se lanza una nueva versin de Microsoft Visual Basic para Aplicaciones
(VBA), conocida como Microsoft Visual Basic para Aplicaciones 7.0 (VBA 7), para que funcione tanto con aplicaciones de 32 como de 64 bits. Resulta
importante destacar que los cambios que se tratan en este artculo se aplican solo a la versin de 64 bits de Microsoft Office 2010. Con la versin de 32
bits de Office 2010, es posible usar soluciones incorporadas en versiones anteriores de Microsoft Office sin modificaciones.

Nota

04/05/2016 03:21 p.m.

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

2 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

En una instalacin predeterminada de Office 2010, se instala la versin de 32 bits, incluso en sistemas de 64 bits. Debe seleccionar explcitamente
la opcin de instalacin de la versin de 64 bits de Office 2010.

En VBA 7, debe actualizar las instrucciones existentes de la interfaz de programacin de aplicaciones (API) de Windows (instrucciones Declare) para que
funcionen con la versin de 64 bits. Adems, debe actualizar los punteros de direccin y los identificadores de ventana en tipos definidos por el usuario
que se usan en estas instrucciones. Esto se analiza en mayor detalle en este artculo, al igual que los problemas de compatibilidad entre las versiones de
32 y 64 bits de Office 2010 y las soluciones sugeridas.

Comparacin de los sistemas de 32 bits con los de 64 bits


Las aplicaciones incorporadas con la versin de 64 bits de Office 2010 pueden hacer referencia a espacios de direcciones ms grandes y, por lo tanto,
ofrecen la oportunidad de usar ms memoria fsica que antes, lo que reduce potencialmente la sobrecarga al guardar y extraer datos en la memoria
fsica.
Adems de hacer referencia a ubicaciones especficas (tambin conocidas como punteros) en la memoria fsica que usa una aplicacin para almacenar
datos o almacenar instrucciones de programacin, tambin se pueden usar direcciones para hacer referencia a identificadores de ventana (conocidos
como identificadores). El uso de un sistema de 32 64 bits es lo que determina el tamao (en bytes) del puntero o identificador.
Existen dos problemas fundamentales cuando se ejecutan soluciones existentes con la versin de 64 bits de Office 2010:
Los procesos de 64 bits nativos en Office 2010 no pueden cargar archivos binarios de 32 bits. Este ser un problema habitual cuando se tengan ya
controles Microsoft ActiveX y complementos.
Anteriormente, VBA no tena un tipo de datos de puntero y, debido a esto, los desarrolladores usaban variables de 32 bits para almacenar
punteros e identificadores. Estas variables ahora truncan los valores de 64 bits que devuelven las llamadas de API cuando usan instrucciones
Declare.

Introduccin a la base de cdigo VBA 7


VBA 7 es una nueva base de cdigo, que reemplaza a la versin anterior de VBA. Esta nueva base existe tanto para las versiones de 32 bits como de 64
bits de Office 2010. Proporciona dos constantes de compilacin condicional: VBA7 y Win64. La constante VBA7 ayuda a garantizar la compatibilidad
con versiones anteriores del cdigo al probar si la aplicacin est usando VBA 7 o la versin anterior de VBA. La constante Win64 se usa para probar si
el cdigo se est ejecutando como 32 bits o 64 bits. Estas dos constantes de compilacin se detallan ms adelante en este artculo.
Con ciertas excepciones que se muestran en otras partes de este artculo, las macros en un documento (tambin incluye libros y presentaciones) que se
usaron con la versin de 32bits de la aplicacin funcionar cuando el documento se cargue en la versin de 64bits de la misma aplicacin.

Compatibilidad de controles ActiveX y complementos COM


Los controles ActiveX de 32 bits existentes, tanto de terceros como de Microsoft, no son compatibles con la versin de 64 bits de Office 2010. En el
caso de controles ActiveX y objetos COM, existen tres soluciones posibles:
Si se dispone del cdigo fuente, puede generar una versin de 64 bits.
Puede ponerse en contacto con el proveedor para obtener una versin actualizada.
Puede buscar una solucin alternativa.

Los procesos de 64bits nativos de Office 2010 no pueden cargar binarios de 32bits. Incluye controles comunes de MSComCtl (TabStrip, Toolbar,
StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox) y los controles de MSComCt2 (Animation, UpDown, MonthView,
DateTimePicker, FlatScrollBar). Estos controles se instalaron en versiones anteriores de Microsoft Office y se instalaron con Office 2010 de 32bits. Se
debe encontrar una solucin alternativa para las soluciones VBA de Microsoft Office existentes que usan estos controles cuando el cdigo se migra a
Office 2010 de 64bits. Office 2010 de 64bits no proporciona versiones de 64bits de los controles comunes.

Compatibilidad de la interfaz de programacin de aplicaciones


La combinacin de VBA y bibliotecas de tipos le proporciona una gran funcionalidad para crear aplicaciones de Microsoft Office. Sin embargo, a veces,

04/05/2016 03:21 p.m.

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

3 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

debe comunicarse directamente con el sistema operativo del equipo y otros componentes, como cuando administra memoria o procesos, cuando
trabaja con la interfaz de usuario, como ventanas y controles, o cuando modifica el Registro de Windows. En estos casos, la mejor opcin es usar una
de las funciones externas que estn integradas en archivos de biblioteca de vnculos dinmicos (DLL). Para ello, en VBA se realizan llamadas de API
mediante el uso de instrucciones Declare.

Nota
Microsoft proporciona un archivo Win32API.txt que contiene 1.500 instrucciones Declarar y una herramienta para cortar y pegar la instruccin
Declare que desea incluir en el cdigo. Sin embargo, estas instrucciones son para sistemas de 32bits y deben convertirse a 64bits usando la
informacin que se trata ms adelante en este artculo. Las instrucciones Declare existentes no se van a compilar en VBA de 64 bits hasta que no
sean marcados como seguras para 64 bits por el atributo PtrSafe. Puede encontrar ejemplos de este tipo de conversin en el sitio web del MVP
(Profesional ms valioso) de Excel Jan Karel Pieterse en: http://www.jkp-ads.com/articles/apideclarations.asp.
El Manual del usuario del Inspector de compatibilidad de cdigos de Microsoft Office es una herramienta til para inspeccionar la sintaxis de
instrucciones Declare de API para el atributo PtrSafe, de ser necesario, y el tipo de retorno apropiado.

Las instrucciones Declare se parecen a una de las siguientes, dependiendo de si llama a una subrutina (que no tiene valor devuelto) o a una funcin
(que s tiene un valor devuelto).
VBA

Public/Private Declare Sub SubName Lib "LibName" Alias "AliasName" (argument list)
Public/Private Declare Function FunctionName Lib "Libname" alias "aliasname" (argument list) As Type

La funcin SubName o FunctionName se reemplaza con el nombre real del procedimiento en el archivo DLL y representa el nombre que se usa
cuando el procedimiento se llama desde el cdigo VBA. Si lo desea, tambin puede especificar un argumento AliasName para el nombre del
procedimiento. El nombre del archivo DLL que contiene el procedimiento que se va a llamar viene despus de la palabra clave Lib. Finalmente, la lista
de argumentos contiene los parmetros y los tipos de datos que deben pasarse al procedimiento.
La instruccin Declare siguiente abre una subclave en el Registro de Windows y reemplaza su valor.
VBA

Declare Function RegOpenKeyA Lib "advapi32.dll" (ByVal Key As Long, ByVal SubKey As String, NewKey As Long) As
Long

La entrada de Windows.h (identificador de ventana) para la funcin RegOpenKeyA es la siguiente:


VBA

LONG RegOpenKeyA ( HKEY hKey, LPCSTR lpSubKey, HKEY *phkResult );

En Microsoft Visual C y Microsoft Visual C++, el ejemplo anterior se compila correctamente para 32 bits y 64 bits. Esto se debe a que HKEY est
definido como puntero, cuyo tamao refleja el tamao de memoria de la plataforma en la que est compilado el cdigo.
En versiones anteriores de VBA, no haba un tipo especfico de datos de puntero, de manera que se usaba el tipo de datos Long. Adems, debido a que
el tipo de datos Long siempre es de 32 bits, este se interrumpe cuando se usa en un sistema con memoria de 64 bits, ya que los 32 bits superiores
pueden truncarse o pueden sobrescribir otras direcciones de memoria. Cualquiera de esas situaciones puede dar como resultado un comportamiento
impredecible o bloqueos del sistema.
Para resolver esto, VBA ahora contiene un tipo de datos de puntero verdadero: LongPtr. Este nuevo tipo de datos permite escribir la instruccin
Declare original correctamente como:
VBA

Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey as LongPtr, ByVal lpSubKey As String,
phkResult As LongPtr) As Long

Este tipo de datos y el nuevo atributo PtrSafe permiten usar esta instruccin Declare en sistemas de 32 o 64bits. El atributo PtrSafe indica al
compilador VBA que la instruccin Declare est dirigida para la versin de 64 bits de Office 2010. Sin este atributo, el uso de la instruccin Declare en
un sistema de 64bits dar como resultado un error de tiempo de compilacin. Tenga en cuenta que el atributo PtrSafe es opcional en la versin de
32bits de Office 2010. Esto hace posible que las instrucciones Declare existentes funcionen como siempre lo han hecho.
La siguiente tabla proporciona ms informacin sobre el nuevo calificador y el tipo de datos que ya se han analizado, as como otro tipo de datos, dos

04/05/2016 03:21 p.m.

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

4 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

operadores de conversin y tres funciones.

Tipo

Elemento

Descripcin

Calificador

PtrSafe

Indica que la instruccin Declare es compatible con 64 bits. Este atributo es obligatorio en sistemas de 64 bits.

Tipo de datos

LongPtr

Un tipo de datos variable que es de 4 bytes en versiones de 32 bits y de 8 bytes en versiones de 64 bits de Office 2010.
Esta es la forma recomendada de declarar un puntero o un identificador para un cdigo nuevo, pero tambin para
cdigo heredado si tiene que ejecutarse en la versin de 64 bits de Office 2010. nicamente se admite en tiempo de
ejecucin de VBA 7 en 32 bits y 64 bits. Tenga en cuenta que le puede asignar valores numricos, pero no tipos
numricos.

Tipo de datos

LongLong

Este es un tipo de datos de 8 bytes que se encuentra disponible slo en versiones de 64 bits de Office 2010. Puede
asignar valores numricos, pero no tipos numricos (para evitar truncamiento).

Operador de
conversin

CLngPtr

Convierte una expresin simple en un tipo de datos LongPtr.

Operador de
conversin

CLngLng

Convierte una expresin simple en un tipo de datos LongLong.

Funcin

VarPtr

Convertidor de datos Variant. Devuelve un tipo de datos LongPtr en versiones de 64 bits y Long en versiones de 32
bits (4 bytes).

Funcin

ObjPtr

Convertidor de objetos. Devuelve un tipo de datos LongPtr en versiones de 64 bits y Long en versiones de 32 bits (4
bytes).

Funcin

StrPtr

Convertidor de cadena. Devuelve un tipo de datos LongPtr en versiones de 64 bits y Long en versiones de 32 bits (4
bytes).

El siguiente ejemplo muestra cmo usar algunos de estos elementos en una instruccin Declare.
VBA

Declare PtrSafe Function RegOpenKeyA Lib "advapi32.dll" (ByVal Key As LongPtr, ByVal SubKey As String, NewKey As
LongPtr) As Long

Tenga en cuenta que se considera que las instrucciones Declare sin el atributo PtrSafe no son compatibles con la versin de 64 bits de Office 2010.
Como se indic anteriormente, existen dos nuevas constantes de compilacin condicional: VBA7 y Win64. Para garantizar la compatibilidad con
versiones anteriores de Microsoft Office, use la constante VBA7 (este es el caso ms comn) para impedir que el cdigo de 64bits se use en la versin
anterior de Microsoft Office. En el caso de cdigo que es diferente entre la versin de 32bits y la de 64bits, como al llamar a una API matemtica que
usa LongLong para su versin de 64bits y Long para la de 32bits, use la constante Win64. El siguiente cdigo muestra el uso de estas dos constantes.
VBA

#if Win64 then


Declare PtrSafe Function MyMathFunc Lib "User32" (ByVal N As LongLong) As LongLong
#else
Declare Function MyMathFunc Lib "User32" (ByVal N As Long) As Long
#end if
#if VBA7 then
Declare PtrSafe Sub MessageBeep Lib "User32" (ByVal N AS Long)
#else
Declare Sub MessageBeep Lib "User32" (ByVal N AS Long)
#end if

En resumen, si escribe un cdigo de 64 bits y pretende usarlo en versiones anteriores de Microsoft Office, se recomienda usar la constante de
compilacin condicional VBA7. Sin embargo, si escribe cdigo de 32 bits en Office 2010, ese cdigo funciona como en versiones anteriores de
Microsoft Office sin necesidad de usar la constante de compilacin. Si desea asegurarse de que est usando instrucciones de 32 bits para versiones de
32 bits e instrucciones de 64 bits para versiones de 64 bits, la mejor opcin es usar la constante de compilacin condicional Win64.

04/05/2016 03:21 p.m.

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

5 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

Uso de atributos de compilacin condicional


El siguiente cdigo es un ejemplo de cdigo VBA heredado que se debe actualizar. Observe los tipos de datos en el cdigo heredado que se actualizan
para usar LongPtr porque se refieren a identificadores o punteros
Cdigo VBA heredado
VBA

Declare Function SHBrowseForFolder Lib "shell32.dll" _


Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Nuevo cdigo VBA


VBA

#if VBA7 then


' VBA7
Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Type BROWSEINFO
hOwner As LongPtr
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As LongPtr
lParam As LongPtr
iImage As Long
End Type
#else

' Downlevel when using previous version of VBA7

Declare Function SHBrowseForFolder Lib "shell32.dll" _


Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
#end if
Sub TestSHBrowseForFolder ()
Dim bInfo As BROWSEINFO
Dim pidList As Long
bInfo.pidlRoot = 0&
bInfo.ulFlags = &H1

04/05/2016 03:21 p.m.

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

6 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

pidList = SHBrowseForFolder(bInfo)
End Sub

Preguntas ms frecuentes
Las siguientes son preguntas frecuentes relacionadas con las versiones de 32bits y 64bits de Microsoft Office.

Cundo conviene usar la versin de 64bits de Microsoft Office?


Esto es ms una cuestin de la aplicacin host (Word, Excel, etc.) que est usando. Por ejemplo, Excel es capaz de controlar hojas de clculo
mucho ms grandes con la versin de 64bits de Microsoft Office.
Puedo instalar las versiones de 64bits y 32bits de Microsoft Office en paralelo?
No.
Cundo debo convertir los parmetros Long a LongPtr?
Debe comprobar la documentacin de la API de Windows en la red de desarrolladores de Microsoft para la funcin que desea llamar. Punteros y
controladores deben convertirse a LongPtr. Por ejemplo, la documentacin para RegOpenKeyA proporciona la siguiente firma:
C#

LONG WINAPI RegOpenKeyEx(


__in
HKEY hKey,
__in_opt
LPCTSTR lpSubKey,
__reserved DWORD ulOptions,
__in
REGSAM samDesired,
__out
PHKEY phkResult
);

Los parmetros se definen como:

Parmetro

Descripcin

hKey [in]

Un controlador para una clave de registro abierta.

lpSubKey [in, optional]

El nombre de la subclave de registro que se debe abrir.

ulOptions

Este parmetro est reservado y debe ser cero.

samDesired [in]

Una mscara que especifica los derechos de acceso deseados a la clave.

phkResult [out]

Un puntero para una variable que recibe un controlador a la clave abierta.

En Win32API_PtrSafe.txt, la instruccin Declare est definida como:

Declare PtrSafe Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As LongPtr, ByVal
lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As LongPtr) As Long

Debo convertir punteros y controladores en estructuras?


S. Consulte el tipo MSG en Win32API_PtrSafe.txt:

04/05/2016 03:21 p.m.

Compatibilidad entre versiones de 32 y 64 bits de Office 2010

7 of 7

https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx

Type MSG
hwnd As LongPtr
message As Long
wParam As LongPtr
lParam As LongPtr
time As Long
pt As POINTAPI
End TypeF

Cundo conviene usar strptr, varpt y objptr?


Debe usar estas funciones para recuperar punteros a cadenas, variables y objetos, respectivamente. En la versin de 64deMicrosoft Office, estas
funciones devuelven un LongPtr de 64bits, que se puede pasar a las instrucciones Declare. El uso de estas funciones no cambi de las versiones
anteriores de VBA. La nica diferencia es que ahora devuelven un LongPtr.

Conclusin
La adicin de una versin de 64bits de Office 2010 permite mover ms datos para obtener una mayor capacidad. Cuando se escribe cdigo de 32bits,
puede usar la versin de 64bits de Microsoft Office sin cambios. Sin embargo, cuando escribe cdigo de 64bits, debe asegurarse de que el cdigo
contiene palabras clave especficas y constantes de compilacin condicional para garantizar que el cdigo tenga compatibilidad con versiones
anteriores de Microsoft Office y que se va a ejecutar el cdigo correcto si combina cdigo de 32 y de 64bits.

Recursos adicionales
Para obtener ms informacin sobre instrucciones Declare, vea los siguientes recursos:
Anatomy of a Declare Statement

2016 Microsoft

04/05/2016 03:21 p.m.

Vous aimerez peut-être aussi