Windows7上のクセル2013?でVBAを使ったファイルを作成し、昨年、後半にエクセル付きWindows10のPCに変えて、エクセルのVBAを修正しながら使用していました。
最近、違うPCにファイルを持ってきてエクセルファイルを立ち上げるとマクロエラーが出てVBAが動かない。エクセル2019だけど、どうも今までのエクセルが64ビットのエクセルソフトになっていなかったらしい。
エクセルの32、64ビット判別はエクセルを起動して、 「アカウント」→「Microsoft Excelのバージョン情報」で確認できます。
取り合えず、動かさないといけないので、ネットで調べて対応してみた。どんなエラーかというとマクロを動作させると以下のようにVBAで定義したライブラリーが赤字で...
Private Declare Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
一番簡単な変更は「PtrSafe」を以下のように挿入すればOKでした。
Private Declare PtrSafe Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
しかしこれだと32ビットエクセルでVBAを動作させようとすると、逆にエラーになってしまいます。
その場合、64ビット対応ですよ、VBAはバージョンが7以上ですよ、と言うような場合分けをすれば32ビット、64ビットどちらでも問題なく動作します。
#If Win64 Then
Private Declare PtrSafe Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
#Else
Private Declare Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
#End If
#If VBA7 And Win64 Then
Private Declare PtrSafe Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
#Else
Private Declare Function apiEmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
#End If
場合分けしてもエディター上では上記のようにエラーの赤字が出てきますが、問題なく動作します。
でも、上位互換になるように自動で識別してくれないなんて流石、マイクロソフトのソフトウェアですね!!!