• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Actualizar una declaración de API de 32 a 64 bits

Paco_py

Member
Buen día mis amigos expertos, gusto en saludarlos.

Hace cierto tiempo conseguí automatizar ciertos procesos, gracias a un código que me encontré internet y adapté al mío.
Ahora necesito usar el mismo código en otra pc que es de 64 bits y no tengo idea como actualizar la declaración de Appi (no sé si llamarlo así es correcto).

Les dejo el código:
Código:
Private Declare Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
  ByVal tecla As Byte, ByVal monitor As Byte, _
  ByVal estado As Long, ByVal extra As Long)
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
Agradezco la ayuda, de antemano.
 

Héctor Miguel

Well-known member
por lo tocante a la API de las teclas, cambia de esto:
Paco_py dijo:
Código:
Private Declare Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
  ByVal tecla As Byte, ByVal monitor As Byte, _
  ByVal estado As Long, ByVal extra As Long)
a esto:
Código:
Private Declare PtrSafe Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
  ByVal tecla As Byte, ByVal monitor As Byte, _
  ByVal estado As Long, ByVal extra As LongPtr)
por lo tocante a "sleep", comprueba que sigue funcionando (?)
(hasta donde se)... "sleep.exe" fue retirado desde windows 8

por lo tocante a otras adaptaciones a 64 bits:
- Declaring API Functions In 64 Bit Office
 

eavjperu

Active member
Hola

El dilema, más que cambiar de un sistema operativo de 32 a 64 bits, está en cambiar el tipo de Office de 32 bits a 64 bits. Dichos llamados a las funciones de la API de Windows marcarán errores en un Excel de 64 bits. Ya Hector Miguel te dio la respuesta, pero yo agregaría que para que funciones tanto en Excel de 32 bits como en Excel de 64 bits, pues podrías colocarlos así en cualquier módulo estándar (en la parte superior del modulo):
Código:
#If VBA7 Then
    Public Declare PtrSafe Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
        ByVal tecla As Byte, ByVal monitor As Byte, _
        ByVal estado As Long, ByVal extra As Long)
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Public Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
#Else
    public Declare Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
        ByVal tecla As Byte, ByVal monitor As Byte, _
            ByVal estado As Long, ByVal extra As Long)
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
#End If
Ah, en Excel de 64 bits verás una parte en rojo (como error), pero no hay problema. Por cierto, Sleep sí funciona en Windows 10.

Saludos

Abraham Valencia
 
Arriba