【本日のミッション】
VBA マクロを含むファイルを64bitバージョンのExcelで立ち上げたら、エラーが出ずにマクロが動かなかった。VBEプロシージャのコードも表示されない現象を解決。
ミッションの概要
OPENメソッド マクロを含むファイルを64bitバージョンのExcelで立ち上げた時、エラーが出ないのにマクロが動かない・・・という現象が起こりました。
確認のためにVBE画面を開いて、デバッグしようと思ったら・・・マクロのコードが表示されません!モジュールをダブルクリックしてもコードウインドウは表示されません・・・。
本日時点で、この苦境を乗り切った方法をご紹介します。
きっと、今後もっといい方法が見つかると思います。その時は改めてご紹介させていただきますね。
原因
同じマクロを含むファイルを32bitバージョンのExcelで開くと、問題なく開きました。
原因は64bitバージョンのExcelにあるようです。
Microsoft365(Office365)をインストールする際、初期値として64bitバージョンがインストールされる仕様になっているようです。何も考えずに規定値のままインストールしてしまうと、64bitバージョンのExcelになってしまいます。
今まで32bitバージョンのExcelで作ってきたマクロの一部に、64bitバージョンExcelのマクロで正常に動かないものがあります。その例として下記のようなものがありますが、これには解決策があります。
Excel起動時に「コンパイルエラー」。64ビット システムで Declareステートメントに、PtrSafe属性を設定(Excel VBA )
現時点では、これ以外にも正常に動かないものがあるようですが、どの部分を修正しないといけないのか1つ1つ検証していかないといけません・・・。
今稼働中の業務をこなしながら、過去のマクロを64bit対応に修正していくなんて・・・そんな時間ありませんよね・・・。
解決方法 その1 ファイルを修復する
これをやってみて一時的にファイルが正常に開きました。でも、この方法でも正常に開かないPCもありましたが・・・。
元ファイルのバックアップをとってから作業してください。
- Excelを単独で立ち上げて、[ファイルを開く]で対象ファイルを選択します。
- [開く]ボタン右の[▼]をクリックして「開いて修復する」をクリックしてファイルを開きます。
- 問題なくファイルが開いたら、保存します。(前のファイルのバックアップをお忘れなく!)
- 再度、このファイルをダブルクリックで立ち上げ、正常起動したら完了です。
正常起動しない場合は、バックアップ取ったファイルに戻してください・・・涙
解決方法 その2 Excelを32bitにする
取り急ぎ、現状では全てのExcelのマクロを64bitバージョンに修復するのは現実的ではないので、必要なPCのExcelを64bitから32bitに変更して頂くお願いをしています。
よっぽどのビッグデータを扱わない業務であれば、32bitで問題ありませんので・・・。
Excelのバージョン「32bit」か「64bit」か確認する方法
自身のPCのExcelにインストールされているのが、「32bit」か「64bit」かを確認する方法は下記の通りです。(自宅Excelが古いものなので、皆様と画面の仕様が異なることご了承ください。)
- [ファイル]ー[アカウント]-「Excelのバージョン情報」をクリックします。
- Microsoft Excel のバージョン情報にあるビット数を確認します。
下記の場合は、「64ビット」がインストールされています。
【参考】
指定したフォルダ内のファイル名全てを取得(Excel VBA)
変数でよく使われる「buf」「tmp」の意味
Dir関数が取得するファイルの順番
指定したフォルダ内のフォルダ名全てをGetAttrを使って「エラー53 ファイルが見つかりません。」を出さずに取得(Excel VBA)
GetAttrとは?「= vbDirectory」ではなく「And vbDirectory」となるビット演算の疑問
フォルダ名だけを取得したい時に出てくる 「.」 と 「..」 とは?
指定したフォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
CreateObject(“Scripting.FileSystemObject”) を使ってサブフォルダを取得
再帰処理とは?フォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
指定したフォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
再帰処理とは?フォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
参照渡し「ByRef」と値渡し「ByVal」の違い(Excel VBA)
ファイルのフルパスからファイル名のみを取得 InStrRev関数(Excel VBA)
指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
FileSystemObjectとは?CreateObject 関数 FolderExists・GetFolderの使い方
FileSystemObject CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止
再帰処理とは?指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
ファイルのフルパスからファイル名のみを取得 Split関数(Excel VBA)
Callステートメントとは 引数 括弧()の使い方(Excel VBA)
指定したフォルダ内から「特定の文字を含まないファイル名」を取得(Excel VBA)
ワイルドカードとは。使い方いろいろ。(Excel)
Dir関数の使い方。ファイル名やフォルダ名の取得方法。(Excel VBA)
指定したフォルダのファイル名を取得し、そのファイル名を一括で変換(Excel VBA)
Excel起動時に「コンパイルエラー」。64ビット システムで Declareステートメントに、PtrSafe属性を設定(Excel VBA )
「ファイルを開く」ダイアログボックス から ファイル名を取得(Excel VBA)
「ファイルを開く」ダイアログボックス から 複数 ファイル名を取得(Excel VBA)
指定フォルダ内のサブフォルダ全てをフォルダ構成のみ(空フォルダ)を別フォルダにコピー(Excel VBA)
再帰処理とは?指定フォルダ内のサブフォルダ全てをフォルダ構成のみ(空フォルダ)を別フォルダにコピー(Excel VBA)
エクセル Dir関数 を使ってファイルの存在(有無)を確認する(Excel VBA)
エクセル FileSystemObject を使ってファイルの存在(有無)をチェックする(Excel VBA)
Excel Dir関数 存在しないファイル・フォルダが「存在している」と判定される理由(Excel VBA)
64ビットExcel起動時にコンパイルエラー。Private Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)(Excel VBA )
Excel VBA セキュリティリスク このファイルのソースが信頼できないため、Microsoftによりマクロの実行がブロックされました。 を解決
Excel 64bit VBAファイルを立ち上げたらマクロが動かないエラー VBEプロシージャコードが表示されないを解決