先月頭まで使えてたVBAで「実行時エラー'1004'」が表示される

なんとなく自己解決できてしまったのですが、

1.何が原因であったのか

2.対処は正しかったのか

識者の方ご教示お願いいたします。

 

まずは現象から

VBAを組んで97-2003形式(.xls)で保存した2つのブックがあります。元はXP端末でExcel2007で作成・保存したものです。

片方は、メニューというかランチャー的なもので、フォームで作ったボタンを押下するとボタン表記に応じた別のブックをオープン/ランするものです。

片方は、オープンされると、別のcsvファイルを読み込んで加工してまた別のエクセルブックに書き出し自分でクローズするバッチのようなブックです。

 

両方のブックは、ここ半年くらい月初に起動し運用してきました。主にXPでExcel2007端末でです。

4月も月初(日付は不明)に起動し、特に問題はなかったようです。

5月はGWもあって5月15日に起動したのですが、メニューのブックは読み込み・VBA起動には問題なかったのですが、

フォームのボタンを押下してバッチのブックをオープンしたところ表題のメッセージが表示され、もとのメニューブックの

Application.Run "バッチのブック!ブックの関数名"で止まってしまいました。

正確なメッセージは

------------------------ 
実行時エラー '1004'
マクロ'バッチ.xls!Macro1'を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。
------------------------

です。もちろん、メニューの方もバッチの方もVBAのソースは読めます。


さて、対処ですが

まずは端末の問題かと思い、XP-Excel2010端末で起動したところ無事処理が終了しました。

しかし別の(私の)XP-Excel2007端末ではやはり上記メッセージが表示されデバッグモードに入ります。

これは5月のパッチで.xls形式に何かあったのかも?と想像し、.xlsm形式で保存し直そうとしたところ、フォームを使ったメニューブックの方は素直に「名前を変えて保存」できたのに、バッチブックの方は次のメッセージが表示され保存できませんでした。

「保存中にエラーが検出されました。幾つかの機能を削除または修復することにより、ファイルを保存できる場合があります。」

これについてつらつら調べていたところ、某掲示板に次の4月のパッチが影響していると記載があったので

[MS12-027] MSCOMCTL.OCX の脆弱性により、リモートでコードが実行される (2012 年 4 月 10 日)
http://support.microsoft.com/kb/2664258/

記事の通り.exdファイルを私のXP-Excel2007端末で検索し、全て削除してみると、無事バッチブックも.xlsm形式で保存できました。

マクロ上のオープンするブック名も.xlsmに書き換え起動してみると、無事問題なく動きました。

 

さて、ここからが首をひねるところなのですが、なんとなく上記MS12-027の表記が臭かったので、私の、.exdファイルを削除したXP-Excel2007端末で、元々の.xls形式のメニューブックから.xls形式のバッチブックをrunさせてみたところ、なんの問題もなく起動してしまいました。

と言うことは、状況から見てもともと.exdファイルを削除してやれば問題は解決した?

果たしてこの対処で問題なかったのか、原因は4月のパッチにあったのか、識者の方よろしくお願いします。

 

質問情報


最終更新日 2019年10月31日 表示 14,618 適用先:
回答
回答

isojima さん、再度投稿をいただきありがとうございます。

前回コメントさせていただいたように詳細なことは解りませんが、アップデートが入ったことによって既存の exd ファイルに影響が出て今回問題が起きてしまった可能性はありますね。

単純に前回削除された後に新たに自動でできたもの、こちらで動作に問題がなければ削除する必要はないのかな、と思います。

動作に問題がないなら気にされずこのまま使用されてよいのではないかと思います。

また問題が起きてしまった場合は再度質問の投稿お待ちしております。

大沢 孝太郎– Microsoft Support

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。