気になる話題

「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

瀬戸大也と馬淵優佳(嫁・妻)との離婚はある?

競泳の瀬戸大也選手に不倫報道が出ました。 その奥さんは元飛び込みの馬淵優佳さんです。 今年の3月に、次女が生まれたばかりなのに不倫ということで、今後離婚などあるのでしょうか? 関連記事 →瀬戸大也が格 …

no image

「スラムダンク」がアニメ映画化!内容はアニメの続き?声優はどうなる?

スラムダンク作者の井上雄彦先生が、2021年1月7日にTwitterで「【スラムダンク】映画になります!」とツイートしました。 【スラムダンク】映画になります!#slamdunkmovie pic.t …

no image

M-1グランプリ2020敗者復活戦予想!決勝進出は「ぺこぱ」?「からし蓮根」?

今年も2020年12月20日18:30からM-1グランプリの決勝が放送されますね! 司会今田耕司上戸彩ん 審査員松本人志オール巨人上沼恵美子中川家・礼二富澤たけし立川志らく塙宣之 決勝進出者は現在9組 …

no image

菅首相が忘年会をした銀座のステーキ店どこ?参加者は?

菅義偉首相が、銀座にある高級ステーキ店で忘年会をしたということでニュースになっていますね。 しかも忘年会を行った日というのが2020年12月14日という「Go To トラベル」を全国一斉に一時停止する …

no image

iPhone12miniにするかXperia5Ⅱにするか迷ったので比較してみた

iPhone 12 miniの予約前日になって、やっとドコモが2020-2021冬春モデルを発表しました。 以前はずっとXperiaを使用していましたが、2年ちょっと前にiPhoneも使ってみようとい …