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

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

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

お世話になります。 Access2010 フォーム上にActiveXの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/4282)
回答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% (295/459)
回答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/4282)
回答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

  • VBでファイルの判定

     VBでドラッグドロップやcommondialogなどで読み込まれたファイルの拡張子の判定をしたいのですがどうしたらよいかわかりません。  たとえば、テキストファイルが読み込まれるとテキストボックスに表示、ほかのファイルが読み込まれると違う処理をするというようなことをしたいのですがわからないので教えていただきたいです。

  • ドラッグ&ドロップについてです。(VB.NET)

    フォーム上に「PictureBox」コントロールを置いた状態で実行し、その「PictureBox」にデスクトップ等からファイルやフォルダをドラッグ、ドロップしまして、そのファイルやフォルダのパス名を取得するにはどうすればいいですか? そのプログラムのサンプルがあるサイトでもいいです。

  • 有効なアクセス権を判定できません。

    ドメインを跨いでの有効なアクセス権について質問します。 環境は Windows 2000ネイティブ環境→片方向の信頼関係→Windows 2003 です。 2000ネイティブの方を(A 2003ネイティブの方を(B とします。 (A にはファイルサーバがあり、ファイルサーバのフォルダにはNTFSセキュリティアクセス権を施しています。 このフォルダに(B のユーザを追加し、(B のユーザもこれらのフォルダにアクセス出来るようになりました。 そこで (A のユーザでログオンしファイルサーバのフォルダのプロパティ→セキュリティタブ→詳細設定→有効なアクセス権タブにて 許可されている(B のユーザ-を判定したところ、 有効なアクセス権を判定できませんのメッセージが表示されました。 (A の許可されているユーザで判定したところ、問題なく表示されています。 また逆に (Bのユーザでログオンし同様に(A の許可されているユーザを判定したところ 同様のメッセージが表示されました。 (A でも(Bでも許可されているユーザでフォルダにアクセスはできますが、 何故このようなメッセージが出るかがわかりません。 情報をお持ちの方お願いいたします。

  • ファイルがフォルダに入らない件

    ドキュメント内にあるファイルを整理するため、新しいフォルダを作り、そのフォルダにファイルをドラッグドロップしても入らないので、困っています。

  • Access2003で「Winsock」を使用出来ない

    Access2003のフォームに「Winsock」を貼り付けて、TCP/IPでデータのやりとりを行っていたのですが、今日Accessを立ち上げてそのフォームを開くと「このコントロールにはオブジャクトがありません」というエラー表示となり、フォームの「Winsock」アイコンも白くなっていました。その白くなった「Winsock」アイコンを削除して再度ActiveXコントロールの挿入で「Winsock」を選んだのですが、「このActiveXコントロールはサポートされていません。」というメッセージが表示されフォームに挿入出来ません。 パソコンの環境ですが、OSはXp、Access2003、Winsockは6.0(SP4)です。 ちなみにこのWinsockが動かないMDBファイルを別のパソコンにコピーし、開くと正常にWinsockが動作します。 Access自体に何らかの障害が発生しているのでしょうか? 非常に困っています、どなたかお助け下さい。

  • VB6でのドラッグ&ドロップについてです

    VB6でのことなんですが、リネームツールを作ろうと思って色々やってるのですが、うまくいきません。 フォルダをドラッグ&ドロップをして、 text1にフォルダの中のファイル名を表示して、text2にファイル名をコピーしてリネーム、というようなものを作りたいと考えています。 フォルダをドラッグ&ドロップして表示されるのが、そのフォルダのフルパスになってしまいます。 ドラッグ&ドロップしたフォルダの中のファイル名だけを表示する方法はどうすればいいのでしょうか? よろしくお願いします。

  • フォルダ間でファイルの移動ができない

    フォルダ間でファイルをドラック&ドロップしようとしたときマウスのポインタが駐車禁止みたいなマークに変わってファイルの移動が出来ません。(ちょうどマイコンピュータにファイルを移動しようとしたときに出来ないのと同じ現象です) 新規でフォルダ・ファイルをつっくて試しましたがやはりドラック&ドロップ出来ませんでした。 ただし、ファイルのカット&ペーストは可能です。 使い勝手がわるくなり、困っています。 再インストールするしかないのでしょうか? 誰か、原因&対策がわかれば教えてください。 なるべく再インストールはしたくありません。 よろしくお願いします。

  • フォルダにファイルを入れられない

    フォルダにファイルを入れられないんですがどうしたらいいでしょうか?ドラッグ&ドロップしてみてもファイルが元の位置のままで動きません。このままだと整理できなしし・・・。誰かお知恵を拝借ください。 よろしくお願いします。

  • ダイアログ上でファイルドラッグ判定

    はじめまして質問させてください。 VC++ 2005 MFC で開発しております。 ダイアログ上でファイルをドラッグしているかどうか 判定する実装方法を教えていただきたく思います。 仕様と致しまして、 MouseMoveメッセージで現在ファイルをドラッグしていることが 認識できれば良いです。 また、タイマーやスレッドで随時監視しておくといった方法でもかまいません。 なにかAPI等ご存知の方がおられましてら ご教授の程、宜しくお願い致します。

  • Accessのカレンダーコントロールを参照できない

    Access2000を使っています。 現行のシステムでは、出荷情報などを確認するのにクエリーの抽出条件(日付型のフィールドです)を直接書き換えています。 これをフォームをかませてもっと簡単に日付の指定ができるようにしたいと考えています。 フォームにツールボックスから「カレンダー コントロール」というのをドラッグして貼り付けました。 イミディエイトウィンドウで以下のように打ってみたところ、エラーメッセージが出ます。 ?forms!フォーム1!ActiveXコントロール0 「指定した式に、|プロパティに対する不正な参照が含まれます。」とあるのですが、何が悪いのでしょう。

専門家に質問してみよう