酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

久しぶりにExcel VBAのメンテをしてるよ

Office 2010の64bitで開いた時に挙動がおかしいって聞いて、ちょっと調査してみました。

64bit版のOffice 2010だとWin32APIが利用できない

どうやらOffice 2010(っていうか64bit版のVBA?)ではWin32APIを使う為に、PtrSafeという修飾子をつけてやれば良いらしいです。

PtrSafe修飾子を付与することで、とりあえずコンパイルエラーを出なくすることはできました。

でもこの修正をしてしまうと他の32bit環境では動かなくなってしまいます。実行するPCによってExcelファイルを変更する必要があって、今後32bit版と64bit版の両方をメンテナンスしなければいけなくなってしまいます。コスト面から考えてもそれは非常に困ります。

Office 2010とそれ以外とで処理の切り分けをおこなう

64bit版のOffice 2010ですとWin32APIが利用できません。そこでどうしたら良いのかを考えるとOffice 2010かそれ以外かで切り分けすれば良いことに気がつきました。

Sign in to your Microsoft accountに切り分けの仕方が書かれていました。

#If VBA7 Then
  ' Office2010 用
#Else
  ' 以前のコード
#End If

これで、Office 2010とそれ以外とで処理の切り分けをおこなうことができるようになりました。