質問: True End Sub ### 試したこと デバッグで動かしてもエラーが発生しなかったため、不要そうな部分をコメントアウトしてファイルを再度開くということを繰り返していると、1行目~4行目Range型の変数宣言でこけているということがわかりました。 Range型ではなくObject型で宣言すればエラーが発生せず正常にファイルを開くことができるのですが、なぜ動くようになったのか不明なうえ、この対処方法で良いものなのか、また問題2の'CutCopyMode'メソッドの件は放置してよいのか、といった疑問が残ります。 3の問題に関しては、エラーが表示されなくなったことでファイルを正常に開くことができるようになりました。 ### 補足情報(言語/FW/ツール等のバージョンなど) 長文となってしまい申し訳ございませんが、どなかご回答をよろしくお願い致します。
回答: 型をObjectにすれば動作するとのことなので、アーリーバインディングに伴って発生している問題なのだと推測しています VBAはComponent Object Model(以下COM)に強く依存した開発言語です。メソッドを呼び出すときの名前解決などを実行時に行う方法がレイトバインディング、コンパイル時などに行う方法がアーリーバインディングです。VBAでは型をRange等のように明示した場合はアーリーバインディング、Object型として宣言した場合がレイトバインディングにあたります。 アーリーバインディングにしておけばコンパイル時にエラーとなったり、メソッド入力時に名前の補間処理などが動いて便利なので、アーリーバインディングでコードを書くことが多いです。ですがアーリーバインディングには欠点があり、様々なバージョンのExcel上で動作を保証することが困難になります。Excelのバージョンによって引数が変わっていたり、メソッドがなかったりすると、エラーとなってしまうからです。 従って様々なバージョンのExcelで動作させたいのであれば、Object型で宣言し、レイトバインディングを用いた方が無難です。「実行環境を特定のバージョンに固定できないなら、レイトバインディングを採用すべし」というのは、VBAやVB6.0が全盛だった15年位前にはよく知られていたバッドノウハウです。 もう一つの可能性として、VBAの参照設定を確認してみて下さい。Excel2010の環境で新規に作成したExcelファイルの参照設定と同じ状態にすれば動くかも知れません。