- ベストアンサー
Excel2003VBAのDir関数でフォルダ名を取得する方法とエラー対策
- Excel2003VBAを勉強中の者です。フォーム上のコマンドボタンを押すと、特定のフォルダ内のフォルダ名を取得し、リストボックスに表示するコードを作成しています。しかし、エラーが発生してしまいます。
- エラーの原因はDir関数が正しく使えていないことで、変数bufにはフォルダ名がセットされているにもかかわらず、ファイルが見つからないというエラーメッセージが表示されます。
- エラーの対策として、GetAttr関数を使用し、フォルダをチェックする必要があります。また、フォルダ名として「.」や「..」が省かれるように条件分岐を追加する必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
デバッグしながら,つまりステップ実行しながらローカルウィンドウで変数の値の変化をウォッチしながらデバッグしていけばすぐに気がついた問題ですが。 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(ファイル/フォルダ名)のフルパスで調査をしないと,「ありません」エラーになります。
その他の回答 (2)
- o_chi_chi
- ベストアンサー率45% (131/287)
#1です。 たしかにフォルダ名だけだとエラーになりますね。 フルパスならOKですけど。。。
お礼
そうなんです。 keithinさんからもご教示頂きましたが、フルパスをちゃんと入力しなければならなかったんです。 完全に盲点でした。 何度もご回答頂いてしまって申し訳ありません。 お時間頂けた事、とても感謝しております。 またこの様な質問をする事があるかと思いますが、懲りずにお付き合いして頂けたら嬉しいですw 有難う御座いました!
- o_chi_chi
- ベストアンサー率45% (131/287)
bufが""のとき GetAttr(buf) がエラーになってしまいます。 Do While buf <> "" にすべきでは?
お礼
早速のご回答、有難う御座います。 bufの中身が空=""の状態でエラーが発生するとの件、すぐに確認したいのですが、このコードではbufが"."と".."の状態を処理した後、すぐにエラーが発生してしまっているので、""での検証がまだ出来ないでいるのす。 故にこの問題が解決出た後、おっしゃられる通りに""状態でもエラーが発生してしまうのであれば、そこでまた悩まないといけませんね・・・orz ご指摘有難う御座います、心の準備が出来ましたw ちなみに、Do While buf <> ""でも動作的には問題ないと思われるので、それでやってみましたが、しかし同じ部分で同じエラー53が発生してしまいました。
お礼
ご回答いただきまして有難う御座います。 上記のコードにて目的の動作が完遂できる事を確認しました! ご教示頂いた内容はちゃんと理解しました。 これは完全に盲点になっておりました。 そして思わず「あー・・・なるほど!」と声に出してしまいましたw bufにちゃんとファイル名が入っていた事と、Dir関数でパスを指定していた事から 固定観念が出来てしまいすっかり勘違いしておりましたが、考えてみればGetAttr関数を使用するのならば、 改めてパスを入れなくてはならないですよね。 きっと私一人で考え続けていても気付けないままになっていたと思います。 本当に助かりました有難う御座います!!