sistemas - Outlook VBA: ejecuta un código cada media hora con Outlook 2010 64 bits
private declare function showwindow lib user32 64 bit (1)
PtrSafe
no está corrigiendo el código, simplemente indica que se puede PtrSafe
el siguiente declare desde el código de 64 bits.
El puntero devuelto por AddressOf
se prototipa como ByVal lpTimerfunc As Long
que es de 32 bits; es decir, demasiado pequeño para acomodar una dirección de 64 bits. Lo mismo es cierto de hwnd
.
Usa el tipo de LongPtr
para lidiar con esto.
Esta pregunta está hecha (y resuelta) antes, vea Outlook VBA - Ejecuta un código cada media hora Utilicé el código durante varios años sin problemas en varias computadoras con Vista (32 bit), Windows 7 y Windows 8.1 (todas 64 poco). Una nueva computadora con una nueva instalación de Office 2010 presenta algunos problemas.
La versión de 64 bits de Outlook parece reaccionar de forma diferente a la versión de 32 bits. Tengo errores con estas líneas
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Esto se puede corregir con PtrSafe como:
Declare Function PtrSafe SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function PtrSafe KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Otro error aparece en la línea:
TimerID = SetTimer(0, 0, nMinutes, AddressOf TriggerTimer)
Los tipos parecen ser diferentes.