• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access ファイルかフォルダの判定)

Accessファイルかフォルダの判定

このQ&Aのポイント
  • Accessファイルかフォルダの判定方法について教えてください
  • フォーム上のProgressBarコントロールにドラッグ&ドロップされた画像を表示する方法はわかりますが、フォルダの場合はどうすれば良いですか?
  • ファイルとフォルダのパスが取得できているので、そのパスからフォルダかどうか判定する方法が知りたいです

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

  • ベストアンサー
回答No.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 の「ビット処理演算」辺り。

naoto0216
質問者

お礼

NotFound404さま いつもご回答ありがとうございます。 なるほどですね。。指定したパスがフォルダだからといって GetAttr関数で返ってくる「属性を表す整数」の合計値が 必ずしも16ではないってことなんですね。 試しにフォルダのプロパティで「隠しファイル」にチェックを 入れたものを使ったところ、GetAttr(取得したパス)だけだと 18が返ってきましたが、(GetAttr(取得したパス) And vbDirectory) だと16が返ってきました。 属性とか関係なしに単純にフォルダか否かを判定する場合は And vbDirectoryが必要なんですね。 大変勉強になりました。ありがとうございました。

その他の回答 (4)

  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.4

No.3の回答が惜しい。GetAttr関数を使うのは良いけど、条件式の書き方が微妙に間違ってます。 誤 If GetAttr(取得したパス) And vbDirectory <> vbDirectory Then 正 If (GetAttr(取得したパス) And vbDirectory) <> vbDirectory Then これでいい感じになると思います。

naoto0216
質問者

お礼

kawais070さま 度々のご回答ありがとうございます。 仰る通り、No3さんのご回答に括弧付けすることにより 問題なく判定できるようになりました! GetAttrで指定したパスの属性がか返ってきて、それが vbDirectoriy(16)じゃないなら、ファイルになる・・って ことだと思うのですが、 GetAttr(取得したパス) And vbDirectoryの「And vbDirectory」 って何のためにあるのでしょうか。 勉強不足で大変恐縮ですが、ご教示頂けると幸いです。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.3

> ドロップ&ドロップされたファイル、もしくはフォルダのパスは取得して いるので、そのパスからフォルダか否か判定することは可能でしょうか。 「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

naoto0216
質問者

お礼

m3_makiさま ご回答ありがとうございます。 No4さんの回答にあるとおり、括弧付けすることで 判定できるようになりました。 ※括弧がないとファイルの場合もElseになりました。 教えて頂いたURLを見てみましたが・・・見ても理解 できずにおります。。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは If Dir (パス, vbDirectory) = "" Then   Msgbox ”フォルダではない” End If とかで、判定出来ませんか?

naoto0216
質問者

補足

ushi2015さま ご回答ありがとうございます。 vbDirectoryはフォルダの有無を確認するものだと思う のですが、ファイルもフォルダもElseになってしまいます。 例えば、ファイル(C:\画像\aaa.jpg)の場合、 Dir (パス, vbDirectory)の結果は「aaa.jpg」となります。 フォルダ(C:\画像)の場合、Dir (パス, vbDirectory)の結果は 「画像」となります。 両方とも""ではない=両方とも実在しているからElseになる のかなと。 教えて頂いた内容を解説して頂けると幸いです。

  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.1

VBAで、 Debug.Print Dir("C:\hoge.hage\") というやつを実行した場合、C:\hoge.hage がファイルだと実行時エラーとなり、C:\hoge.hage がフォルダならエラーとなりません。 ファイルかフォルダか不明なものの最後に \ を追加して、Dir関数で判別ということで。

naoto0216
質問者

お礼

kawais070さま ご回答ありがとうございます。 以下のようにしてみたところ、うまくいきました。 path = 取得したパス & "\" If Dir(path) = "" Then Me.画像.Picture = 取得したパス Else MsgBox "フォルダは指定できません Exit Sub End If 取得したパスに\をくっつけて、そのパスが存在しなければ (ファイル名の後に\をくっつけると存在しないので)Thenとなり、 画像が表示され、そのパスが存在すれば(フォルダの場合は \をくっつけても存在するので)Elseとなりメッセージを表示 ・・・って感じですが、この認識で合ってますでしょうか。

naoto0216
質問者

補足

うまくいってませんでした。。。 ドラッグしたフォルダ内にサブフォルダがある場合、 Thenになってしまいました。 同じフォルダをドラッグした場合でも、構成により 結果が異なりました。 ドラッグしたフォルダの直下に、サブフォルダ及びファイルが ある場合はOKなのですが(Elseになる)、 ドラッグしたフォルダ直下にサブフォルダがあり、サブフォルダの 中にファイルが入っている場合はNGでした。。

関連するQ&A