Windows10でVBA(32bit)実行エラー「DeclareステートメントにPtrSafe属性~」対処法

DeclareステートメントにPtrSafe属性

とある日、知人より「昔のツールをWindows10で動かしたらエラーがでた…」との問い合わせを受けて解決した時のメモです。

32bit用のAPIをWindows10の64bit環境で使うときには少し注意が必要なのです。

同じ現象でお悩みの方はぜひ参考にしてくださいね!

知人
32bit機能使えないの?

ちょっといじる必要がありますが、Windows10でも基本的に32bit機能は使えます。また、このエラーは簡単に解決できますよ。

えいじまん
まず本記事の対策を試してみて!

Windows10で発生したVBAエラーの詳細

今回知人のPCで、次のエラーが発生したようです。

このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。Declareステートメントの確認及び更新を行い、次にDeclareステートメントにPtrSafe属性を設定してください。

知人
どういうこと?(泣

DeclareステートメントにPtrSafe属性~の原因

ExcelやAccessのVBAからDLL内の関数を使う際に、Declareを使用します。

Windows10などの64bit環境でこの機能を使う場合は、PtrSafe属性を使わなければ、このエラーが発生してしまうのです。

原因の詳細はこちら↓

>>>Office の 32 ビット バージョンと 64 ビット バージョン間の互換性 – Microsoft

DeclareステートメントにPtrSafe属性~の対処法

「Declare」と「Sub/Function」の間に「PtrSafe」を入れてみましょう。

Declare PtrSafe Sub/Function

例えば、ファイルを検索する関数「FindFirstFile」でエラーが発生した場合は、次のように「PtrSafe」を入れます。

Private Declare PtrSafe Function FindFirstFile …

FindFirstFileの場合は、これだけでエラーが発生しなくなります。

知人
エラーが消えた(感動

DeclareステートメントにPtrSafe属性~まとめ

今回は、昔から使われているExcelやAccessをWindows10で起動したときに、発生する次のエラーの対応方法について紹介しました!

このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。Declareステートメントの確認及び更新を行い、次にDeclareステートメントにPtrSafe属性を設定してください。

このエラーが発生する場合は、「Declare」と「Sub/Function」の間に「PtrSafe」を入れてみてくださいね。

Declare PtrSafe Sub/Function

同じ現象でお困りの方の参考になれば幸いです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする