web-dev-qa-db-fra.com

Sleep Lib "kernel32" donne une erreur système 64 bits

J'essaie de fermer l'accès (Application.Quit) Après avoir exécuté toutes les fonctions.

VBA ferme l'accès une fois toutes les fonctions terminées a été une référence pour moi.

mais quand je Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long), cela me donne l'erreur suivante:

Le code de ce projet doit être mis à jour pour être utilisé sur des systèmes 64 bits.

Existe-t-il un remplacement de ce code pour exécuter toutes les fonctions avant de fermer complètement l'accès?

11
John Tipton

Le paramètre dwMilliseconds est un DWORD, il sera donc techniquement 32 bits sur une machine 32 bits et 64 bits sur une machine 64 bits. Pour cette raison, il nécessite la notation PtrSafe (bien que techniquement dwMilliseconds soit correctement marshalé car c'est ByVal... et qui veut attendre aussi longtemps de toute façon) Modifiez la déclaration en ceci :

#If VBA7 Then
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
17
Comintern

changez votre déclaration api en ceci:

#If VBA7 And Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Pour les API 64 bits, lisez ceci: http://www.jkp-ads.com/articles/apideclarations.asp

4
cyboashu