Solución:
Estos deberían funcionar en Excel de 64 bits
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As LongPtr
Private Declare PtrSafe Function IIDFromString Lib "ole32" _
(ByVal lpsz As LongPtr, ByRef lpiid As GUID) As LongPtr
Private Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal Hwnd As LongPtr, ByVal dwId As LongPtr, ByRef riid As GUID, _
ByRef ppvObject As Object) As LongPtr
Si necesita que se ejecute en ambos, puede usar lo siguiente #If VBA7
#If VBA7 Then
'64 bit declares here
#Else
'32 bit declares here
#End If
Puede encontrar un buen recurso para las declaraciones de API de PtrSafe Win32 aquí: Win32API_PtrSafe.txt
No estoy muy seguro de la IIDFromString
y AccessibleObjectFromWindow
pero creo que deberían ser subs
en lugar de functions
. Y lpsz
debiera ser String
como abajo. ¿Quizás alguien pueda confirmar esto?
Private Declare PtrSafe Sub IIDFromString Lib "ole32" ( _
ByVal lpsz As String, ByRef lpiid As GUID)
Private Declare PtrSafe Sub AccessibleObjectFromWindow Lib "oleacc" _
(ByVal Hwnd As LongPtr, ByVal dwId As LongPtr, ByRef riid As GUID, _
ByRef ppvObject As Object)
Necesitamos hacer los siguientes dos cambios de código:
- Reemplace el tipo de datos “Long” por “LongPtr”, en todos los lugares del script
-
Debe cambiar las Declaraciones de función privada como se muestra a continuación
- ANTIGUO: Función de declaración privada GetTimeZoneInformation Lib “kernel32” (_ lpTimeZoneInformation como TIME_ZONE_INFORMATION) siempre que
- NUEVO:
Función privada Declare PtrSafe GetTimeZoneInformation Lib “kernel32” (_ lpTimeZoneInformation como TIME_ZONE_INFORMATION) como LongPtr
Esto es trabajo para mí.
Gracias.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)