Funzioni API in Office 64bit

Alcune applicazioni create per VBA a 32 bit possono dare problemi se aperte con Office a 64 bit, l’errore sotto riportato si è verificato nel tentativo di aprire il programma del’EPO IPscore  (un DB in Access) con Office 2010 a 64 bit:

Errore API 64 bit

Nel dettaglio gli errori rilevati erano  i seguenti:

– I Errore

Codice VBA

– II Errore

Errore codice VBA

 

Per il I errore:

 la declaration per la 32 bit era la seguente:

  • Declare Function GetOpenFileName Lib “comdlg32.dll” _ Alias “getOpenFileNameA” (pOpenfilename As OPENFLENAME) As Long

che è diventata per la 64 bit:

  • Declare PtrSafe Function GetOpenFileName Lib “comdlg32.dll” _ Alias “getOpenFileNameA” (pOpenfilename As OPENFLENAME) As Long”

Nel  II caso l’errore riguardava la funzione API Sleep:

nella versione 32 bit era:

  • Public Declare Sub Sleep Lib “kernel32” ( _ByVal dwMilliseconds As Long)

in quella 64 bit, aggiungendo l’attributo PtrSafe, il codice è diventato:

  • Public Declare PtrSafe Sub Sleep Lib “kernel32” ( _ByVal dwMilliseconds As Long).

Un utile link  per verificare la corretta sintassi da applicare ai codici VBA per Office 64 bit è il seguente: www.jkp-ads.com

Di norma, come mostrato nel link sopra riportato,   problemi relativi la gestione delle funzioni  si possono risolvere così:

  • aggiungere l’attributo “PtrSafe” dopo dichiarazione  “declare
  • modificare la variabile “Long” in “LongPtr”

Lascia un commento