「マクロの記録」のボタンをクリックして以下の作業のマクロ構文をPCに自動記述させた場合
「ChDirステートメント」で必ずカレントフォルダが変更される一文が記述されます
1.別ファイルを起動させた場合
2.「名前を付けて保存」の処理を実行させた場合
そのため、今までは「カレントフォルダ」を変更しないことには他のファイルやブックを使用できない
とばかり思っていましたが、下記ホームページを拝見したところフルパス名を使用するのであれば
特に「カレントフォルダ」を変更する必要はなさそうであることが分かりました。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
これって、他のファイルやブックを使用する際に「ファイルを開く」などの操作で「ファイルの場所」を
特定したその作業をPCがマクロ処理として構文を自動作成してしまっただけの「ChDir」であって、
実際のファイル起動などのマクロ構文をフルパス名で記述するのであれば、「ChDirステートメント」
でのカレントフォルダ変更は特に必要ないという認識で正しいのでしょうか?
このことについては何となく理解できたのですが、下記4点について詳しく知りたいので宜しく
お願いします。
1.「ChDrive」、「ChDir」を省略した方がファイルが軽くなるのか(処理が早くなるのか)
2.「ChDrive」、「ChDir」を記述した方がファイルが軽くなるのか(処理が早くなるのか)
3.FSOなどでファイルやフォルダを新たに作成する場合は「ChDir」の記述をした方が良いのか
4.常にフルパス名でマクロ処理することによるデメリットはあるのか
以上です。宜しくお願いします。
No.1ベストアンサー
- 回答日時:
1.2.環境及びプログラムの書き方によって異なります。
自分で処理時間を計るテストプログラムを作って確認して
ください。
一般には人間が識別できるほどの差は出ません。
(複数回実行した誤差の範囲に含まれてしまうと思います)
3.フルパスで指定するなら必要ありません。
4.http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
> でもマクロ上では「相対パス」で指定して利用したい。
なのでは?
> また、逆に、「カレントフォルダ」を使わないと他のファイル
> やブックを扱うことができないと思っている人もいるようですが、
> ほとんどの場合でそのようなことはなく、フルパスでファイル名を
> 指定すれば良いはずです。
とも書いてありますね。
「マクロの記録」は機械的に操作を細切れで記録します。
> Range("B5").Select
> Selection.NumberFormatLocal = "0_ "
これは、機械的な記録法としては仕方のない事です。
命令の前後関係まで考え出すと処理パターンがどんどん増えて
しまいますので。
しかし、実行時はこの Select 系及び、Active 系の命令が曲者で、
2つの命令の間のコンマ数秒にユーザーの操作が加わって
Select されたオブジェクトが変わっていることがあるわけです。
ですから直接エクセルオブジェクトに命令します。
Range("B5").NumberFormatLocal = "0_ "
「マクロの記録」をそのまま使うと実に不安定なプログラムと
なります。職業プログラマは処理の意味を理解して安定した
プログラムに書き直します。「マクロの記録」は参考にする
ためのものでしかありません。
「カレントフォルダ」をプログラムで使う事は稀です。
リンク先の説明にあった通り、まず信用できないからです。
フォルダを操作したい場合は、FileSystemObject のフォルダ
オブジェクトをフルパス指定で取得すれば、その後、その
フォルダのみに命令を繰り返す事も簡単に出来ます。
「カレントフォルダ」が他のアプリケーションによって変化
しても影響を受けないプログラムを書けます。
逆に利用する場合は、ユーザの操作を把握する場合や
反映する場合。パスを通していないライブラリの操作を
する場合くらいかなぁ。DOS コマンドとかのレベルなら
カレントフォルダを基準に処理するので使うかもしれない
ですね。
ご丁寧な回答を頂き、誠にありがとうございます。
「カレントフォルダ」を使用せずに、常にフルパス名で使用をした処理を
心がけていこうと思います。また、「マクロの記録」に頼らずにマクロ処理の
意味を理解して安定したシステムを構築していこうと思います。
おかげ様で疑問に思っていたことが全て解決しました。
No.2
- 回答日時:
> しかし、実行時はこの Select 系及び、Active 系の命令が曲者で、
> 2つの命令の間のコンマ数秒にユーザーの操作が加わって
> Select されたオブジェクトが変わっていることがあるわけです。
あー、シングルスレッドだから一般的には無いか。
デバッグとか頻繁にしてる人で無いとここに困る事って少ない
かもしれませんね。むしろありがちなのが、Select 出来ない状態
で Select 命令を出して失敗した時(基本的にフォーカスを受け取れ
ない状態=非表示で処理とかプロテクト掛けてたりすると失敗します)
の方が多いでしょうね。
訂正します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで縦に並んだデータを...
-
Excel2000:Ontimeメソッドで特...
-
ExcelのVBA。public変数の値が...
-
既存のマクロをコンボボックス...
-
エクセルで別のセルにあるふり...
-
右クリックによるイベントマク...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
一つのTeratermのマクロで複数...
-
Excelで特定の文字のところで自...
-
特定のPCだけ動作しないVBAマク...
-
マクロ実行時、ユーザーフォー...
-
エクセルに張り付けた写真のフ...
-
エクセルでA1セルに時刻をリア...
-
エクセル マクロ 指定日の指定...
-
EXCELのマクロの重複起動...
-
VBAの記述の、Sub SetValue()など
-
エクセルのマクロについて教え...
-
VC++ 2008 EXPRESS "_T"識別子...
-
ワードで算用数字を漢数字に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
Excel マクロでShearePoint先の...
-
ExcelVBAでPDFを閉じるソース
-
特定文字のある行の前に空白行...
-
マクロ実行時、ユーザーフォー...
-
wordを起動した際に特定のペー...
-
エクセルで別のセルにあるふり...
-
ソース内の行末に\\
-
マクロで空白セルを詰めて別シ...
-
【EXCEL VBA】オートシェイプを...
-
エクセルのマクロをセルの値に...
おすすめ情報