Академический Документы
Профессиональный Документы
Культура Документы
1 of 7
https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx
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
Nota
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.
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.
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
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
4 of 7
https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx
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
Operador de
conversin
CLngLng
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
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.
5 of 7
https://msdn.microsoft.com/es-es/library/office/ee691831(v=office.14).aspx
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.
Parmetro
Descripcin
hKey [in]
ulOptions
samDesired [in]
phkResult [out]
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
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
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