itanime’s アニメとITのことを呟きます

アニメ・ゲーム・IT関連の話題を呟くサイト

Excel VBA 64bit版の「Declare ステートメント」エラーを解消する方法

はじめに

Windows10に買い替えてExcelも64bit版をインストールしました。 特に問題ないだろう…と高を括っていたのですが、32bit版から修正しないと動かないVBAが出てきましたので、 後学のためにも書き残しておきたいと思います。

Win32 APIシステムプログラミング with Visual C++ 2008

Win32 APIシステムプログラミング with Visual C++ 2008

  • 作者:北山 洋幸
  • 出版社/メーカー: カットシステム
  • 発売日: 2008/10/01
  • メディア: 単行本

問題が起こったマクロはどんな内容?

Win32API URLDownloadToFileでファイルをダウンロードするマクロでした そりゃ~Win32APIって名前なんだから32bit専用ですよね~ 64bit用に修正しなきゃ動きませんよね~💦 tonari-it.com

Declare ステートメントの確認および更新のエラー

エラーメッセージのキャプチャです。

f:id:itanime:20200119191127j:plain
20200119a

Declare FunctioをDeclare PtrSafe Functionに修正

エラーメッセージにすべて答えが書いてあります。 * 修正前

f:id:itanime:20200119191506j:plain
20200119b
* 修正後
f:id:itanime:20200119191606j:plain
20200119c
FunctionのまえにPtrSafeを付け加えることで、あっさりエラーは消えました。 これでマクロを実行できる~と思いきや、今度は別のエラーが発生!

コンパイルエラー 型が一致しません

f:id:itanime:20200119191709j:plain
20200119d
型が違いますって?アイエエエエ! ニンジャ!? ニンジャナンデ!? どう見ても整数でいいでしょーが(# ゚Д゚) まだ子供が食べてるでしょーが!

Long型をLongLong型に修正

どうやら64bitになって扱える数値が増えたので大容量な箱にしてやる必要があるみたいです。

  • 修正後
    f:id:itanime:20200119191813j:plain
    20200119e
    f:id:itanime:20200119191832j:plain
    20200119f
    そのまんまLongを付け加えるという、なんとふざけた書き方なのだろうか? だがわかりやすくてイイ! LongLong型の詳しい解説は以下を参照ください。 cpprefjp.github.io

まとめ

  • 32bit用のAPIなどを使っていた場合は、PtrSafe をつける。整数はLongLong型で宣言する。 ※注意 LongLongにすると64bit専用になってしまうため、32bitと64bit環境を両立させる必要がある場合は、LongLongではなくLongPtrに修正してください。 プログラムに詳しい方なら当たり前すぎて書き残す人はいないのかもしれませんが、 私のような独学ポンコツアマグラマーは、見事にハマってしまったので、 似たような事象でお困りの方の参考になれば幸いです