VBA TIPS(Office 64bitの罠対応)
うっかり32bitのオフィスで作ったマクロが急に動かない、そんな事象があったので対応した話
関数としては「ログオン中のユーザー情報を取得する」というシンプルなものだが、64bitオフィスに入れ替えた際、下記のようなダイアログが出て、利用不可となってしまったのである
はー、なんなんだ…調べるかと、調べたところ、32bitと64bitではwindowsAPIを利用してる場合、コードの書きっぷりについて、考慮が必要とのこと
なるほどねー
じゃあ、何が必要なのかって話なんだけど、「Declareステートメント」で、64bitで利用可能な宣言書く必要あるってことらしい
では、使ってるコードの頭に書いてみますか〜、おっと、注意事項はと…
ははー、そういうことね
まず、今はこれを使ってる
<宣言※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
調べる対象について、浅かったり広かったり振れ幅大きい記事を中心に。 何かしら調べてほしい、聞きたいなどの依頼は気が向けばやるかもしれないです。