- ベストアンサー
Accessファイルかフォルダの判定
- Accessファイルかフォルダの判定方法について教えてください
- フォーム上のProgressBarコントロールにドラッグ&ドロップされた画像を表示する方法はわかりますが、フォルダの場合はどうすれば良いですか?
- ファイルとフォルダのパスが取得できているので、そのパスからフォルダかどうか判定する方法が知りたいです
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こちらが分かりやすいかも? GetAttr関数と"And vbDirectory"との関連(ビット演算)について? http://www.asahi-net.or.jp/~zn3y-ngi/YNxv91831.html https://msdn.microsoft.com/ja-jp/library/wz3k228a%28v=vs.80%29.aspx の「ビット処理演算」辺り。
その他の回答 (4)
- kawais070
- ベストアンサー率52% (2242/4283)
No.3の回答が惜しい。GetAttr関数を使うのは良いけど、条件式の書き方が微妙に間違ってます。 誤 If GetAttr(取得したパス) And vbDirectory <> vbDirectory Then 正 If (GetAttr(取得したパス) And vbDirectory) <> vbDirectory Then これでいい感じになると思います。
お礼
kawais070さま 度々のご回答ありがとうございます。 仰る通り、No3さんのご回答に括弧付けすることにより 問題なく判定できるようになりました! GetAttrで指定したパスの属性がか返ってきて、それが vbDirectoriy(16)じゃないなら、ファイルになる・・って ことだと思うのですが、 GetAttr(取得したパス) And vbDirectoryの「And vbDirectory」 って何のためにあるのでしょうか。 勉強不足で大変恐縮ですが、ご教示頂けると幸いです。
- m3_maki
- ベストアンサー率64% (296/460)
> ドロップ&ドロップされたファイル、もしくはフォルダのパスは取得して いるので、そのパスからフォルダか否か判定することは可能でしょうか。 「GetAttr 関数」 で可能です。 If GetAttr(取得したパス) And vbDirectory <> vbDirectory Then Me.画像.Picture = 取得したパス Else MsgBox "フォルダは指定できません Exit Sub End If No.2 さんへの補足に関してはこちらがわかりやすいですね。GetAttr の使い方も。 http://officetanaka.net/excel/vba/tips/tips95.htm
お礼
m3_makiさま ご回答ありがとうございます。 No4さんの回答にあるとおり、括弧付けすることで 判定できるようになりました。 ※括弧がないとファイルの場合もElseになりました。 教えて頂いたURLを見てみましたが・・・見ても理解 できずにおります。。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは If Dir (パス, vbDirectory) = "" Then Msgbox ”フォルダではない” End If とかで、判定出来ませんか?
補足
ushi2015さま ご回答ありがとうございます。 vbDirectoryはフォルダの有無を確認するものだと思う のですが、ファイルもフォルダもElseになってしまいます。 例えば、ファイル(C:\画像\aaa.jpg)の場合、 Dir (パス, vbDirectory)の結果は「aaa.jpg」となります。 フォルダ(C:\画像)の場合、Dir (パス, vbDirectory)の結果は 「画像」となります。 両方とも""ではない=両方とも実在しているからElseになる のかなと。 教えて頂いた内容を解説して頂けると幸いです。
- kawais070
- ベストアンサー率52% (2242/4283)
VBAで、 Debug.Print Dir("C:\hoge.hage\") というやつを実行した場合、C:\hoge.hage がファイルだと実行時エラーとなり、C:\hoge.hage がフォルダならエラーとなりません。 ファイルかフォルダか不明なものの最後に \ を追加して、Dir関数で判別ということで。
お礼
kawais070さま ご回答ありがとうございます。 以下のようにしてみたところ、うまくいきました。 path = 取得したパス & "\" If Dir(path) = "" Then Me.画像.Picture = 取得したパス Else MsgBox "フォルダは指定できません Exit Sub End If 取得したパスに\をくっつけて、そのパスが存在しなければ (ファイル名の後に\をくっつけると存在しないので)Thenとなり、 画像が表示され、そのパスが存在すれば(フォルダの場合は \をくっつけても存在するので)Elseとなりメッセージを表示 ・・・って感じですが、この認識で合ってますでしょうか。
補足
うまくいってませんでした。。。 ドラッグしたフォルダ内にサブフォルダがある場合、 Thenになってしまいました。 同じフォルダをドラッグした場合でも、構成により 結果が異なりました。 ドラッグしたフォルダの直下に、サブフォルダ及びファイルが ある場合はOKなのですが(Elseになる)、 ドラッグしたフォルダ直下にサブフォルダがあり、サブフォルダの 中にファイルが入っている場合はNGでした。。
お礼
NotFound404さま いつもご回答ありがとうございます。 なるほどですね。。指定したパスがフォルダだからといって GetAttr関数で返ってくる「属性を表す整数」の合計値が 必ずしも16ではないってことなんですね。 試しにフォルダのプロパティで「隠しファイル」にチェックを 入れたものを使ったところ、GetAttr(取得したパス)だけだと 18が返ってきましたが、(GetAttr(取得したパス) And vbDirectory) だと16が返ってきました。 属性とか関係なしに単純にフォルダか否かを判定する場合は And vbDirectoryが必要なんですね。 大変勉強になりました。ありがとうございました。