5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-01-19

はじめに

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

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

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

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

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

Declare FunctioをDeclare PtrSafe Functionに修正

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

  • 修正前
    WS000037.JPG

  • 修正後
    WS000040.JPG

FunctionのまえにPtrSafeを付け加えることで、あっさりエラーは消えました。
これでマクロを実行できる~と思いきや、今度は別のエラーが発生!

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

WS000034.JPG

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

Long型をLongLong型に修正

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

  • 修正後
    WS000038.JPG
    WS000039.JPG

そのまんま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で宣言する)

プログラムに詳しい方なら当たり前すぎて書き残す人はいないのかもしれませんが、
私のような独学ポンコツアマグラマーは、見事にハマってしまったので、
似たような事象でお困りの方の参考になれば幸いです

5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?