- ベストアンサー
別ファイル起動時に必要なカレントフォルダの変更とは?
- マクロの記録を使用して別ファイルを起動した場合、ChDirステートメントでカレントフォルダが変更されますが、フルパス名を使用する場合は特に必要ありません。
- ChDriveやChDirを省略することでファイルが軽くなったり処理が早くなることはありません。
- FSOなどで新しいファイルやフォルダを作成する場合には、ChDirの記述が必要な場合があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1.2.環境及びプログラムの書き方によって異なります。 自分で処理時間を計るテストプログラムを作って確認して ください。 一般には人間が識別できるほどの差は出ません。 (複数回実行した誤差の範囲に含まれてしまうと思います) 3.フルパスで指定するなら必要ありません。 4.http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_140.html > でもマクロ上では「相対パス」で指定して利用したい。 なのでは? > また、逆に、「カレントフォルダ」を使わないと他のファイル > やブックを扱うことができないと思っている人もいるようですが、 > ほとんどの場合でそのようなことはなく、フルパスでファイル名を > 指定すれば良いはずです。 とも書いてありますね。 「マクロの記録」は機械的に操作を細切れで記録します。 > Range("B5").Select > Selection.NumberFormatLocal = "0_ " これは、機械的な記録法としては仕方のない事です。 命令の前後関係まで考え出すと処理パターンがどんどん増えて しまいますので。 しかし、実行時はこの Select 系及び、Active 系の命令が曲者で、 2つの命令の間のコンマ数秒にユーザーの操作が加わって Select されたオブジェクトが変わっていることがあるわけです。 ですから直接エクセルオブジェクトに命令します。 Range("B5").NumberFormatLocal = "0_ " 「マクロの記録」をそのまま使うと実に不安定なプログラムと なります。職業プログラマは処理の意味を理解して安定した プログラムに書き直します。「マクロの記録」は参考にする ためのものでしかありません。 「カレントフォルダ」をプログラムで使う事は稀です。 リンク先の説明にあった通り、まず信用できないからです。 フォルダを操作したい場合は、FileSystemObject のフォルダ オブジェクトをフルパス指定で取得すれば、その後、その フォルダのみに命令を繰り返す事も簡単に出来ます。 「カレントフォルダ」が他のアプリケーションによって変化 しても影響を受けないプログラムを書けます。 逆に利用する場合は、ユーザの操作を把握する場合や 反映する場合。パスを通していないライブラリの操作を する場合くらいかなぁ。DOS コマンドとかのレベルなら カレントフォルダを基準に処理するので使うかもしれない ですね。
その他の回答 (1)
- MARU4812
- ベストアンサー率43% (196/452)
> しかし、実行時はこの Select 系及び、Active 系の命令が曲者で、 > 2つの命令の間のコンマ数秒にユーザーの操作が加わって > Select されたオブジェクトが変わっていることがあるわけです。 あー、シングルスレッドだから一般的には無いか。 デバッグとか頻繁にしてる人で無いとここに困る事って少ない かもしれませんね。むしろありがちなのが、Select 出来ない状態 で Select 命令を出して失敗した時(基本的にフォーカスを受け取れ ない状態=非表示で処理とかプロテクト掛けてたりすると失敗します) の方が多いでしょうね。 訂正します。
お礼
ありがとうございます。参考になりました。
お礼
ご丁寧な回答を頂き、誠にありがとうございます。 「カレントフォルダ」を使用せずに、常にフルパス名で使用をした処理を 心がけていこうと思います。また、「マクロの記録」に頼らずにマクロ処理の 意味を理解して安定したシステムを構築していこうと思います。 おかげ様で疑問に思っていたことが全て解決しました。