web-dev-qa-db-ja.com

Sleep Lib "kernel32"により64ビットシステムエラーが発生する

すべての機能を実行した後、アクセス(_Application.Quit_)を閉じようとしています。

すべての機能が終了した後のVBAのクローズアクセス が参考になりました。

しかし、Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)の場合、次のエラーが表示されます。

このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。

アクセスを完全に閉じる前にすべての機能を実行するために、このコードを置き換えるものはありますか?

11
John Tipton

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
17
Comintern

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

4
cyboashu