気になる話題

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

投稿日:

古いExcelで作られたVBAの内容に処理を追加して欲しいという依頼がありました。

VBAについては、ほとんど仕様も変わっていないので古くても問題ないだろうと思っていたところ

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

というメッセージが表示されVBAが動きません。

目次

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

このメッセージについて調べたところ、

「PtrSafe キーワードを含む Declare ステートメントが推奨される構文です。 64 ビットの数量を格納する必要がある Declare ステートメント (パラメーターと戻り値) のすべてのデータ型が更新され、ポインターとハンドルに LongLongまたは LongPtrを使用した後にのみ、32 ビットおよび 64 ビットプラットフォームの VBA バージョン 7 の開発環境で PtrSafe を含むステートメントが正しく動作します。 VBA バージョン 6 以前との下位互換性を確保するには、次の構造を使用します。」

というこでした。

つまり

「64ビットのVBA バージョン 7を使うときは、DeclareにはPtrSafeを付けろ」

ということらしいです。

なんのこっちゃ良くわからないのですが、PtrSafeを付ければ安全ですということなのか?

※Declareについては、簡単にいうと動的リンクライブラリ(DLL)をVBAなどから使うための宣言に使用します。

対応方法は?

実際の対応方法については簡単です。

こちらに記載されている内容に修正するだけで終わります。

Declare Sub → Declare PtrSafe Sub

Declare Function → Declare PtrSafe Function 

これだけで正常に動作するようです。

VBA バージョン 6 以前も使う場合は

#If VBA7 Then
Declare PtrSafe Sub…
#Else
Declare Sub…
#EndIf

で分ける必要がある問うことみたいですね。

まとめ

こんかいの件については、VBAでDeclareを使用することが、ほとんどなかったので全く知りませんでした。

ただ、これからも「昔作ったVBAのプログラムをそのまま使いたい」という要望はあると思います。

VBAの書き方自体はほとんど変わっていないのですが、たまにこういう仕様変更もあるので焦らずに対応したいですね。

 

 

-気になる話題

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

またPHPでGmailからSMTPでメールが送信できない!原因と対処方法は?

PHPからGmailを使ったメール送信についてですが、今まで正常に遅れていたものが、2022年6月から、突然送れなくなりました。 以前にも同じような現象があり、その時の対応として、使用するGmailア …

no image

月見バーガーが発売!今年2020年の十五夜はいつ?

今年もマクドナルドから月見バーガーが発売されます。 しかも今年は、新メニューが3つあるみたいですね! ところで今年の十五夜っていつなんでしょう? 気になったので調べてみました。     目次 今年20 …

no image

米村歩の経歴は?結婚している?【ガッキーロス】で特別休暇

ガッキ―と星野源の結婚発表後にガッキーロスが起きそうということで自分の会社を特別休暇にしてしまった会社社長についてですが、 株式会社アクシアの米村歩社長という方らしいですね。 6月17日放送の「アウト …

no image

Excelを使用して透過PNG画像を作る方法

通常、透過PNG画像を作成する場合には、有料無料を問わずペイントソフト等を使用すると思います。 ただし、1から複雑な画像を作るのではなく、単に透過させたいだけであればExcelで簡単にできます。 透過 …

若八幡宮(やくはちまんぐう)で厄払いをしてきた!混雑状況も

1月3日に朝に福岡の厄払いで有名な若八幡宮(やくはちまんぐう)で厄払いをしてきました。 ここ2、3年は、混雑するであろう3が日は避けて平日やちょっと後に行っていたんですが、今回は、暇だったということも …