• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2003VBA Dir関数について)

Excel2003VBAのDir関数でフォルダ名を取得する方法とエラー対策

このQ&Aのポイント
  • Excel2003VBAを勉強中の者です。フォーム上のコマンドボタンを押すと、特定のフォルダ内のフォルダ名を取得し、リストボックスに表示するコードを作成しています。しかし、エラーが発生してしまいます。
  • エラーの原因はDir関数が正しく使えていないことで、変数bufにはフォルダ名がセットされているにもかかわらず、ファイルが見つからないというエラーメッセージが表示されます。
  • エラーの対策として、GetAttr関数を使用し、フォルダをチェックする必要があります。また、フォルダ名として「.」や「..」が省かれるように条件分岐を追加する必要があります。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

デバッグしながら,つまりステップ実行しながらローカルウィンドウで変数の値の変化をウォッチしながらデバッグしていけばすぐに気がついた問題ですが。 Dir関数の返値は「ファイル名(フォルダ名)」です。 従って 変更前: If GetAttr(buf) And vbDirectory Then 変更後: dir myPath as string mypath = "C:\Documents and Settings\All Users\Documents\親フォルダ\" If GetAttr(mypath & buf) And vbDirectory Then のようにbuf(ファイル/フォルダ名)のフルパスで調査をしないと,「ありません」エラーになります。

souko3
質問者

お礼

ご回答いただきまして有難う御座います。 上記のコードにて目的の動作が完遂できる事を確認しました! ご教示頂いた内容はちゃんと理解しました。 これは完全に盲点になっておりました。 そして思わず「あー・・・なるほど!」と声に出してしまいましたw bufにちゃんとファイル名が入っていた事と、Dir関数でパスを指定していた事から 固定観念が出来てしまいすっかり勘違いしておりましたが、考えてみればGetAttr関数を使用するのならば、 改めてパスを入れなくてはならないですよね。 きっと私一人で考え続けていても気付けないままになっていたと思います。 本当に助かりました有難う御座います!!

その他の回答 (2)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

#1です。 たしかにフォルダ名だけだとエラーになりますね。 フルパスならOKですけど。。。

souko3
質問者

お礼

そうなんです。 keithinさんからもご教示頂きましたが、フルパスをちゃんと入力しなければならなかったんです。 完全に盲点でした。 何度もご回答頂いてしまって申し訳ありません。 お時間頂けた事、とても感謝しております。 またこの様な質問をする事があるかと思いますが、懲りずにお付き合いして頂けたら嬉しいですw 有難う御座いました!

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

bufが""のとき GetAttr(buf) がエラーになってしまいます。 Do While buf <> "" にすべきでは?

souko3
質問者

お礼

早速のご回答、有難う御座います。 bufの中身が空=""の状態でエラーが発生するとの件、すぐに確認したいのですが、このコードではbufが"."と".."の状態を処理した後、すぐにエラーが発生してしまっているので、""での検証がまだ出来ないでいるのす。 故にこの問題が解決出た後、おっしゃられる通りに""状態でもエラーが発生してしまうのであれば、そこでまた悩まないといけませんね・・・orz ご指摘有難う御座います、心の準備が出来ましたw ちなみに、Do While buf <> ""でも動作的には問題ないと思われるので、それでやってみましたが、しかし同じ部分で同じエラー53が発生してしまいました。

関連するQ&A