気になる話題

「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

戸田恵梨香と松坂桃李が結婚!馴れ初め調査!

戸田恵梨香と松坂桃李が結婚で妊娠は?馴れ初めやきっかけを調査! 戸田恵梨香さんと松坂桃李さんが電撃結婚という衝撃的なニュースが飛び込んできました! 戸田恵梨香さんは最近ではムロツヨシさんと怪しいのでは …

no image

ソフトバンク新プラン「LINEMO」au「povo」は2480円!申し込み方法は?「ahamo」はどうなる?

ソフトバンクの新プランについてですが、名称が「SoftBank on LINE」から「LINEMO」に変更になることが発表されました。 料金もau「povo」に対抗して2480円に変更になるそうです。 …

no image

【アナと雪の女王】11月15日金曜ローで放送!オラフは武内駿輔(たけうちしゅんすけ)

2019年11月15日放送の「金曜ロードSHOW」で【アナと雪の女王】が放送されます。アナ雪といえば、オラフの声優が変更になるということがは発表されていますが、今回の放送ではどうなっているのでしょうか …

福岡でのネットで買った自転車の防犯登録

目次 ネットで買った自転車の防犯登録 ネットでロードバイクを買いました。昨日、届いたので近くの「サイクルベースあさひ」に防犯登録をしようと持ち込みました。ネットで調べると、「サイクルベースあさひ」のよ …

no image

瀬戸大也が格安ラブホで不倫!相手は誰?奥さん(嫁・妻)は馬淵優佳

競泳の日本代表である瀬戸大也さんが不倫をしたとの報道がありました。 瀬戸大也といえば、2016年のリオ五輪で銅メダルを獲得し、昨年の世界選手権では男子個人メドレーで2冠を達成しています。 当然、東京オ …