ワークブックのあるフォルダのファイルを操作したい

「このエクセルファイル(ブック)のあるパスはわからないものか」ということは多い。
ThisWorkbook.Pathで知ることができる。
Open ThisWorkbook.Path & "\foo.txt" For Output As #1
みたいに書けば良い。
このように絶対パスを指定すればそのフォルダに書き出しができる。
相対パスもこの文字列を使って絶対パス形式でつくって指定してやるしかない。

VBAを使ってテキストファイルに書き出す、ようなときにやりがちなのが
Open "foo.txt" For Output As #1
という風に記述してしまう。
こうすると一言で言えばどこのフォルダに書かれるか分からない。不定状態だ。
ソフト的に「不定」というのはおかしいので正確に言えばユーザーのファイル操作などによって最後に操作したフォルダである。
一度も操作していなければシステムかExcelのバージョンに依存して決まる。
もっともこれはプログラムからすれば不定なのだが。

一般常識ではVBAを記述したエクセルファイルのあるフォルダ(開いたフォルダ)に書き出されるように思えるが、エクセルには基本的に「フォルダ」という概念はないと考えられる。

例えばフォルダAのtest.xlsを開いた後にフォルダBのtest.xlsを開くと「既に開かれています」というメッセージが出る。
つまりフォルダ(パス)を意識してファイルを区別をしていないということである。
相対パスの指定もおかしくなると言うことだから常に絶対パスを指定する必要がある。

ついでだが、Excelではシート名やファイル名等に角括弧([])を使うとファイル操作の時におかしな動作を起こす。
comments (0)

コメント

Comment Form