Sleep Lib "kernel32" дает 64-битную системную ошибку

Я пытаюсь закрыть доступ (Application.Quit) после запуска всех функций.

VBA закрыть доступ после завершения всех функций был ссылкой для меня.

но, когда я Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long), Это дает мне

код в этом проекте должен быть обновлен для использования в 64-разрядных системах. ошибка

есть ли замена этого кода для запуска всех функций перед полным закрытием доступа?

любая помощь будет высоко оцененный. Спасибо.

2 ответов


на dwMilliseconds параметр-это DWORD, поэтому технически он будет 32bit на 32-битной машине и 64bit на 64-битной машине. Из-за этого требуется PtrSafe нотации (хотя технически dwMilliseconds будет маршировать правильно, потому что это ByVal... и кто хочет ждать так долго в любом случае) измените декларацию на это:

#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

измените объявление api следующим образом:

#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

для 64бит Апис прочтите это: http://www.jkp-ads.com/articles/apideclarations.asp