Sleep Lib" kernel32"给出了64位系统错误

时间:2017-01-13 15:52:58

标签: vba ms-access access-vba

我尝试在运行所有功能后关闭访问权限(Application.Quit)。

VBA close access after all functions finished一直是我的参考。

但是当我Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)时,它会给我以下错误:

  

必须更新此项目中的代码才能在64位系统上使用。

在完全关闭访问权限之前,是否有替换此代码以运行所有功能?

2 个答案:

答案 0 :(得分:14)

dwMilliseconds参数是一个DWORD,因此技术上在32位机器上为32位,在64位机器上为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

答案 1 :(得分:4)

将您的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位API,请阅读:http://www.jkp-ads.com/articles/apideclarations.asp