はじめに
Windows10に買い替えてExcelも64bit版をインストールしました。
特に問題ないだろう…と高を括っていたのですが、32bit版から修正しないと動かないVBAが出てきましたので、後学のためにも書き残しておきたいと思います。
問題が起こったマクロはどんな内容?
Win32API URLDownloadToFileでファイルをダウンロードするマクロでした
そりゃ~Win32APIって名前なんだから32bit専用ですよね~
64bit用に修正しなきゃ動きませんよね~💦
Declare ステートメントの確認および更新のエラー
Declare FunctioをDeclare PtrSafe Functionに修正
エラーメッセージにすべて答えが書いてあります。
FunctionのまえにPtrSafeを付け加えることで、あっさりエラーは消えました。
これでマクロを実行できる~と思いきや、今度は別のエラーが発生!
コンパイルエラー 型が一致しません
型が違いますって?アイエエエエ! ニンジャ!? ニンジャナンデ!?
どう見ても整数でいいでしょーが(# ゚Д゚) まだ子供が食べてるでしょーが!
Long型をLongLong型に修正
どうやら64bitになって扱える数値が増えたので大容量な箱にしてやる必要があるみたいです。
そのまんまLongを付け加えるという、なんとふざけた書き方なのだろうか?
だがわかりやすくてイイ!
※追記
コメントでありがたい情報をいただきました。
LongLongにすると64bit専用になってしまうため、今度は32bitで動かなくなるとのこと。32bitと64bit環境を両立させる必要がある場合は、LongLongではなくLongPtrに修正してください。
LongLong型の詳しい解説は以下を参照ください。
cpprefjp - C++日本語リファレンス
https://cpprefjp.github.io/lang/cpp11/long_long_type.html
まとめ
-
32bit用のAPIなどを使っていた場合は、PtrSafe をつける。
-
整数はLongLong型で宣言する。(32bitと64bit環境を両立させる場合は、LongLongではなくLongPtrで宣言する)
プログラムに詳しい方なら当たり前すぎて書き残す人はいないのかもしれませんが、
私のような独学ポンコツアマグラマーは、見事にハマってしまったので、
似たような事象でお困りの方の参考になれば幸いです