見出し画像

VBA TIPS(Office 64bitの罠対応)

うっかり32bitのオフィスで作ったマクロが急に動かない、そんな事象があったので対応した話

関数としては「ログオン中のユーザー情報を取得する」というシンプルなものだが、64bitオフィスに入れ替えた際、下記のようなダイアログが出て、利用不可となってしまったのである

画像1

はー、なんなんだ…調べるかと、調べたところ、32bitと64bitではwindowsAPIを利用してる場合、コードの書きっぷりについて、考慮が必要とのこと

なるほどねー

じゃあ、何が必要なのかって話なんだけど、「Declareステートメント」で、64bitで利用可能な宣言書く必要あるってことらしい

では、使ってるコードの頭に書いてみますか〜、おっと、注意事項はと…

画像2

ははー、そういうことね

まず、今はこれを使ってる

<宣言※32bit版>
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GeUserNameA" (ByVal IpBuffer As String, nSize As Long) As Long

<宣言※64bit版>
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GeUserNameA" (ByVal IpBuffer As String, nSize As LongPtr) As Long

はい、PtrSafeをFunction前につけ、LongはLongPtrでいいだろと変更

再実行すると、問題なく動いた!よかったよかった。

あとは32bitでも動かすと考えるなら、IF文で条件追加だね!

じゃ、そんな感じでw


調べる対象について、浅かったり広かったり振れ幅大きい記事を中心に。 何かしら調べてほしい、聞きたいなどの依頼は気が向けばやるかもしれないです。