pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Excel:バージョン違いでVBAが動かない。sleepが使えない。

2007で「Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)」

PCをいったん休ませるため、VBAでつかう「sleep」です。Excel2007上でVBAを作成し、Excel2019で動かしたらエラーが出て止まりました。

2019で「Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

エラー警告文が表示され、PtrSafe属性がどうとかこうとか…。すぐさまネット徘徊したら、「Private Declare PtrSafe Sub (以下略)」と Declare の後に「PtrSafe」を書き込んでやればよいことがわかりました。

参考

API の互換性
Microsoft は、1,500 個の Declare ステートメントが含まれている Win32API.txt ファイルと、コードに含める Declare ステートメントをコピーするツールを提供しています。 ただし、これらのステートメントは 32 ビット システム用であるため、この記事で後ほど説明する情報に従って 64 ビットに変換する必要があります。 既存の Declare ステートメントは、PtrSafe 属性を使って 64 ビットに対して安全なステートメントとしてマークするまでは、64 ビットの VBA にコンパイルされません。 この種類の変換の例については、Excel MVP Jan Karel Pieterse の Web サイト (https://www.jkp-ads.com/articles/apideclarations.asp) をご覧ください。 Office Code Compatibility Inspector ユーザーズ ガイドは、PtrSafe 属性と適切な戻り値の型 (必要に応じて) の API Declare ステートメントの構文を検査するのに役立ちます。