Excel2010 64bit版でVBAを使う時の注意点。
2013-05-05|エクセルVBA
ここ2週間くらいの間、1つ1つは小さいんですけど、Excel VBAを使った
お仕事が立て続けに入ってきました。
Excelのバージョンは全て2010でした。
ちょっと前までは2003のエクセルも結構あったのですが、最近はすっかり
2007や2010が多くなりましたね。
そのうち2013も出てくるかも?
どのお仕事も、2日間ほどで完了するレベルの規模のお仕事です。
順調にこなしていたのですが、1件だけ、お客さんのパソコンで動かすと
エラーが発生して動かないとの事。
OSとExcelのバージョンをお客さんと同じ環境にして開発しており、特に
問題なく動いているのですが、お客さんのパソコンだと、どうしても動いて
くれないんです。
原因がさっぱり分かりません
悩んでいても仕方ないので、Skypeのデスクトップ共有を利用し、お客さんの
パソコンの画面を見せてもらいました。
まずはエクセルのバージョンを見せてもらったところ、私の環境と違うところを
発見しました
Excelのバージョンは同じなのですが、64bit版としてインストールされている
事でした。
原因はここしかない
という事で、Excel VBAについて調べました。
発生しているエラーもバージョンの互換性が~というエラーでしたし。
すると原因らしきものを見つけました。
Declare ステートメントです。
私はExcel VBAを利用する際、Win32APIをシステムコールする場合がよくあるのですが、
その際に「Declare Function~」という感じで書いてます。
マイクロソフトのページによると、「64ビット番のOfficeで実行するときは、すべての
Declare ステートメントに PtrSafe キーワードが含まれている必要があります」と
書かれています。
という事で、
Declare Function ~ Lib "user32" () As Long
を
Declare PtrSafe Function ~ Lib "user32" () As LongPtr
とする事で、無事にエラーを回避出来ました
PtrSafeはDeclare ステートメントが64bitシステムを対象としていることを示しています。
また、データ型として32bitのLongは、64bitではLongPtrとなります。
他にも64bit版では変更になるデータ型や関数、定数、ステートメントがあるので注意が
必要です。
64bit版としてインストールされているExcelは初めてだったので、今回はいいお勉強に
なりました
やっぱり何事も経験ですね~

お仕事が立て続けに入ってきました。
Excelのバージョンは全て2010でした。
ちょっと前までは2003のエクセルも結構あったのですが、最近はすっかり
2007や2010が多くなりましたね。
そのうち2013も出てくるかも?
どのお仕事も、2日間ほどで完了するレベルの規模のお仕事です。
順調にこなしていたのですが、1件だけ、お客さんのパソコンで動かすと
エラーが発生して動かないとの事。
OSとExcelのバージョンをお客さんと同じ環境にして開発しており、特に
問題なく動いているのですが、お客さんのパソコンだと、どうしても動いて
くれないんです。
原因がさっぱり分かりません

悩んでいても仕方ないので、Skypeのデスクトップ共有を利用し、お客さんの
パソコンの画面を見せてもらいました。
まずはエクセルのバージョンを見せてもらったところ、私の環境と違うところを
発見しました

Excelのバージョンは同じなのですが、64bit版としてインストールされている
事でした。
原因はここしかない

発生しているエラーもバージョンの互換性が~というエラーでしたし。
すると原因らしきものを見つけました。
Declare ステートメントです。
私はExcel VBAを利用する際、Win32APIをシステムコールする場合がよくあるのですが、
その際に「Declare Function~」という感じで書いてます。
マイクロソフトのページによると、「64ビット番のOfficeで実行するときは、すべての
Declare ステートメントに PtrSafe キーワードが含まれている必要があります」と
書かれています。
という事で、
Declare Function ~ Lib "user32" () As Long
を
Declare PtrSafe Function ~ Lib "user32" () As LongPtr
とする事で、無事にエラーを回避出来ました

PtrSafeはDeclare ステートメントが64bitシステムを対象としていることを示しています。
また、データ型として32bitのLongは、64bitではLongPtrとなります。
他にも64bit版では変更になるデータ型や関数、定数、ステートメントがあるので注意が
必要です。
64bit版としてインストールされているExcelは初めてだったので、今回はいいお勉強に
なりました

やっぱり何事も経験ですね~



- 関連記事
-
- Excel2010 64bit版でVBAを使う時の注意点。 (2013/05/05)
- VBAのお仕事2件受注。 (2013/03/11)
- Excel 2010に大苦戦!! (2013/03/02)
- マイクロソフトのExcelを極めたい (2012/12/12)
- No Tag