別ファイル起動時に必要なカレントフォルダの変更とは?

このQ&Aのポイント
  • マクロの記録を使用して別ファイルを起動した場合、ChDirステートメントでカレントフォルダが変更されますが、フルパス名を使用する場合は特に必要ありません。
  • ChDriveやChDirを省略することでファイルが軽くなったり処理が早くなることはありません。
  • FSOなどで新しいファイルやフォルダを作成する場合には、ChDirの記述が必要な場合があります。
回答を見る
  • ベストアンサー

別ファイル起動時にはカレントフォルダの変更が必要?

「マクロの記録」のボタンをクリックして以下の作業のマクロ構文をPCに自動記述させた場合 「ChDirステートメント」で必ずカレントフォルダが変更される一文が記述されます  1.別ファイルを起動させた場合  2.「名前を付けて保存」の処理を実行させた場合 そのため、今までは「カレントフォルダ」を変更しないことには他のファイルやブックを使用できない とばかり思っていましたが、下記ホームページを拝見したところフルパス名を使用するのであれば 特に「カレントフォルダ」を変更する必要はなさそうであることが分かりました。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_140.html これって、他のファイルやブックを使用する際に「ファイルを開く」などの操作で「ファイルの場所」を 特定したその作業をPCがマクロ処理として構文を自動作成してしまっただけの「ChDir」であって、 実際のファイル起動などのマクロ構文をフルパス名で記述するのであれば、「ChDirステートメント」 でのカレントフォルダ変更は特に必要ないという認識で正しいのでしょうか? このことについては何となく理解できたのですが、下記4点について詳しく知りたいので宜しく お願いします。  1.「ChDrive」、「ChDir」を省略した方がファイルが軽くなるのか(処理が早くなるのか)  2.「ChDrive」、「ChDir」を記述した方がファイルが軽くなるのか(処理が早くなるのか)  3.FSOなどでファイルやフォルダを新たに作成する場合は「ChDir」の記述をした方が良いのか  4.常にフルパス名でマクロ処理することによるデメリットはあるのか 以上です。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

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 コマンドとかのレベルなら カレントフォルダを基準に処理するので使うかもしれない ですね。

excuse-me
質問者

お礼

ご丁寧な回答を頂き、誠にありがとうございます。 「カレントフォルダ」を使用せずに、常にフルパス名で使用をした処理を 心がけていこうと思います。また、「マクロの記録」に頼らずにマクロ処理の 意味を理解して安定したシステムを構築していこうと思います。 おかげ様で疑問に思っていたことが全て解決しました。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

> しかし、実行時はこの Select 系及び、Active 系の命令が曲者で、 > 2つの命令の間のコンマ数秒にユーザーの操作が加わって > Select されたオブジェクトが変わっていることがあるわけです。 あー、シングルスレッドだから一般的には無いか。 デバッグとか頻繁にしてる人で無いとここに困る事って少ない かもしれませんね。むしろありがちなのが、Select 出来ない状態 で Select 命令を出して失敗した時(基本的にフォーカスを受け取れ ない状態=非表示で処理とかプロテクト掛けてたりすると失敗します) の方が多いでしょうね。 訂正します。

excuse-me
質問者

お礼

ありがとうございます。参考になりました。

関連するQ&A

  • PowerPointのカレントフォルダを移動したい

    PowerPointと組み入れた動画のファイルは全て同じフォルダに入れているのですが、 組み込んだ動画の再生が、開いた後の一度しか再生できなくなっていて困っています。 どうもPowerPoint開いたときのフォルダが再生後に既定のフォルダに移動してしまって いるようなのです。ということで、EXCELでできる以下のことと同様のことをPowerPointで したいです。なお、使ってるPowerPointは 2010 です。 Sub カレントフォルダの移動() Dim strPath As String strPath = ThisWorkbook.Path ChDrive strPath ChDir strPath End Sub できれば、PowerPointを開いた時に動作させたいです。 よろしくお願いいたします。

  • カレントドライブの変更をしても、そのマクロの実行ができない

    VIsta SP1 ExcelXPでマクロ作成中の超初心者です。今日昼から4時間かけて試行錯誤しましたが、深みにはまるばかりで、途方に暮れています。お助けください。  1)現状    Aブック-----マクロ記述用    Bブック-----請求用紙データ  2)Bブックにマクロを記述しました。そのマクロはBブックから正常に実行できました。  3)Bブックのマクロを、Aブックに複写し、カレントフォルダを変更しても、そのマクロがAブックにしか実行されません。このマクロををBブックに実行したいのですが、どうしてもできません。ご教示をお願いします。

  • カレントブックのファイル名の取得

    早速ですが。 カレントブック(例:test.xls)の名前をどうやって取得できますか。 マクロ(code)にカレントブック名を固定値(test.xls)で指定していますが、 下記のように、改善したいと思いますが、 ================================= test.xlsのマクロに PCvsFileName="test.xls" Windows("PCvsFileName").Activate ================================= 該当xlsファイル名は常に変わるから、カレントブックのファイル名の取得方法が 知りたいです。 よろしくお願いします。

  • 起動時のマクロイベント

    お世話になります。 現在VBAである処理を行なおうとしています。 手順1.ブックを開いた時点で任意の場所に格納されているフォルダ名をボタン名にセットし表示 手順2.フォルダ名が表示されたボタンをクリックすると新しいブックが開き、クリックしたボタン名に相当するフォルダの中身のファイル名をボタン名にセットする。 手順3.ファイル名が表示されたボタンをクリックするとファイルが表示される。 としています。 それぞれのブック(Sheet1)のなかに Private Sub Workbook_Open() (処理を記述) End Sub をつくり、手順1.手順2.ともにフォルダ名やファイル名を取得する処理を記述しているのですが、ブックを起動した時点では実行されません。 ブックの起動後に自らマクロボタンをクリックさせなければならない状態です。 マクロを実行しなければエラーになり、 マクロを実行すれば思うような結果が返ってきます。 処理を”ThisWorkbook”のなかに記述しても変わりませんでしたし、マクロが有効になっていないのかと思い、セキュリティー設定を確認したところ「中」になっていたので大丈夫であるとは思う出すけど・・・。 問題点を解決するにはどうしたらよいのでしょうか。 コマンドの誤りがあるのでしょうか? 何か設定が必要なのでしょうか? 起動時にマクロボタンを自動でクリックするようなコマンドが必要なのでしょうか? 色々考えているのですが、解決に至りません。 どなたかご教授宜しくお願いします。

  • カレントディレクトリの変更に関する質問

    Perlの関数で「chdir」と言うカレントディレクトリを変更する関数を使いたいのですが 今持ってる本を見ると、説明に chdir 式 と書いてあるのですが、その式(引数)には何の式を入力すればいいのでしょうか 出来れば例も示してくだされば嬉しいです (パスの事だと思いパスを引数にしてみましたが、失敗したみたいでした(Find関数内で使用)) ちなみにOSは、WINDOWSです

    • ベストアンサー
    • Perl
  • <EXCEL2007 VB(VBA) カレントフォルダの変更方法>

    <EXCEL2007 VB(VBA) カレントフォルダの変更方法> VBからプログラムで用途に合わせてEXCELの読み出し、保存のフォルダ位置をコントロールしようとしています。 ファイルの読み出し、保存指定の時に希望のカレントフォルダを開けるように、プログラムでCHDIRやチェンジドライブを指定してから「GetOpen」「GetSaveAs」を実行しても、カレントフォルダはマイドキュメントから変わりません。 「EXCELのオプション-保存-規定のファイルの場所」では、固定化されてしまうので利用出来ません。 EXCEL2007では方法が変わったのでしょうか? 検索しても中々、トピックスに出会わないので思い切って質問に出してみました。 わかる方いましたらよろしくお願いします。

  • パソコンが変わってもマクロが実行できるようにしたい

    windowsXP Excel2000でマクロ作成しました。 私は 6)の aaaa のパソコンを使っています。 これをUSBメモリで他のパソコンに複写し使おうとすると当然エラーがでます。 そのパソコンに 6)ChDir "C:\Documents and Settings\bbbb\デスクトップ\請求書フォルダ" '変更する。 とすればこのマクロが使えます。 パソコンが変わってもこのマクロが使えるようにしたいのですがどうすればよろしいでしょうか。 今はいちいち6)のaaaa、 bbbb部分を変更して使っています。 Sub ブック名に現在の日付を付加して保存() 1)Application.DisplayAlerts = False 2)Dim Filename As String 3)Application.DisplayAlerts = False 4)ChDrive ThisWorkbook.Path 'ブックのドライブに変更する。 5)ChDir ThisWorkbook.Path 'ブックのフォルダに変更する。 6)ChDir "C:\Documents and Settings\aaaa\デスクトップ\請求書フォルダ" '変更する。 7)Filename = Format(Date, "yyyymmdd") 8)On Error Resume Next 9)ActiveWorkbook.SaveAs Filename:="請求" & Filename & ".xls" 10)Err.Clear 11)Application.Quit 12)End Sub

  • マクロ 別ファイルのシートを定義するには

    EXCEL2000でマクロを組んでいます。 マクロを組んでいるファイルと同じフォルダにある別ファイル"Book1.xls"のシート"Sheet1"を変数で定義したいのですが、構文がわかりません。 また、この場合、型は"worksheet"で良いのでしょうか。

  • 同一フォルダ内のファイルを開く

    よろしくお願いします。 エクセルです。 マクロにて、現在開いているファイルと同一フォルダ内のファイルを開きたいのですが、マクロ構成はどうしたらよろしいですか? フォルダ指定のマクロも考えたのですが、PC使用環境によっては、フォルダを置く場所が異なります。 ※同一フォルダ内に保存するマクロは、この『教えて』でChDirを使うことを教授させていただきました。似たような簡単な構成はありますか? 使用環境はXP、offece2003です。

  • フォルダ内の全ブックのシート名を変更したいです。

    同一フォルダ内に、ファイル名の違うエクセルブックが100個ほどあります。 その100個のそれぞれには、シートが1つ入っています。(シート名は、ブック毎に異なっています) それらのシート名を100個全部、「2013-07」という名前にしたいのですが、マクロで一括処理はできますでしょうか? データが多く、マクロ初心者なので、困っております。。 エクセルは2013を使用しています。 お教えいただければ幸いですm(_ _)m

専門家に質問してみよう