質問: エクセルのvbaでファイルの状態を調べるコマンド エクセルのvbaでファイルのコピーをしたいのですが、コピー元がopen状態だとコピーできません。 filecopy "c:\a.xls", "c:\b.xls" そこで、上記のコマンドを実行する前に、コピー元がopen状態かどうかを判断させて、open状態だと実行を5秒待つようなマクロを記述したいのですが、可能でしょうか?
回答: 5秒待つってのはあまり実用性がないアルゴリズムですよ。実際にお使いのソフトでそんなエラー待ち処理をしているソフトってないでしょ? エラーが出たらダイアログが出て中断するとか、エラー内容を出して続行ボタンをおしたら再試行を実行させるとかにするのが普通です。あるいは有無を言わさずアプリが落ちるとかw 現実的にエラーが発生する状況を想定すれば、5秒なり10秒なり待ったところで、ユーザー側がそのエラー状況を解除しない限りはエラーは続くのですから、時間制限でループさせることの意味がまるでありません。 で、その手のエラーの判別については、実際に開いているエクセルファイルがあるかどうかという判別で処理は可能ですが、そんな手間をかけるよりもエラー制御で処理するのがまた一般的な対応法です。 例えば以下のコードを試してみてください。 on error resume next err.clear filecopy "c:\a.xls", "c:\b.xls" msgbox (err.number) msgbox (err.description) 何かのエラーが起きたときにどのようなエラーが起きたかをキャッチすることができます。エラーナンバーによって、どのようなエラーが起きているか、あるいは起きていないかが判別できるので、それにあわせて処理を分岐するようにします。