- ベストアンサー
SHBrowseforfolderについて質問です。
こんにちは。 Access2000で作成しているプログラムのなかで、リストの作成先を指定するために、SHBrowseforfolderというAPIを使用しています。試行錯誤の末、フォルダを選択するところまではできたのですが、細かい設定が分からないのです。 ネットワークドライブの選択はできないようにする、とかファイルも選択できるようにする、とかモジュールに書いているのに、全然できていません。 あと、フロッピードライブやMO、CD-ROMなどの指定はできないようにしたいのですが、それは不可能なんでしょうか。自分でも指定されたパスが正しいか、チェックをかけているのですが、フロッピードライブやMO、CD-ROMなどを指定すると、エラー番号「52」で帰ってきて、そのあとに、自分が出しているメッセージ(「パスが間違っています」)が出てしまうのです。 エラー番号を拾えばいいのかもしれませんが、それ以外にエラーが出てしまうと困るので、それならいっそのこと、最初から指定できないようにしたいのです。 どなたかよい方法をご存知の方、回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
参考URLのページ、下のほうまで読みました? IEのバージョンによって、参照設定ができないことがあると書いてありますよね。 そこに書いてあるとおり、参照設定はせずに使ってください。 あと、下のソースはその環境で使えるかどうかチェックするVBScriptです。 ”ここから”から”ここまで”をコピーして、メモ帳などでファイルに保存し、拡張子をvbsにしてからダブルクリックで実行してみてください。 これでダイアログが表示されればAccessでも使えるはずです。 '-------------ここから Dim objShell Dim objFolder ' オブジェクトの生成 Set objShell = CreateObject("Shell.Application") ' フォルダ選択ダイアログを表示 Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", 0) Set objShell = Nothing '-------------ここまで 当方IE6.0、Access2002ですが、問題なく表示できました。(VBScriptでもAccessVBA共)
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
実はAPI使わなくても出せたりするんですよ、そのコモンダイアログ。 詳しくは、参考URLを見てください。 あと、APIでがんばるのであれば、 http://www.vbvbvb.com/jp/gtips/0951/gSHBrowseForFolder.html http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/#shell1 も参考に。 で、uiFlagsに設定する値の詳細な情報なんですが、MSDNを見るのが一番です。 ただし、WebのMSDNは、数個しか書いていないのでダメですね。 このフラグでできること以上の制限をかけたいのであれば、コールバック関数を使わないといけなくなります。 #ちなみにファイルの選択はできないですよ、これ。
お礼
こんにちは。 早速教えていただいたサイトを見て、真似して書いてみたのですが、しょっぱなからエラーになってしまうのです。サイトの内容なのでここで質問するわけには行きませんが…。私はAccessを使用していますが、サンプルはVB(ですよね?)だからできないのでしょうか。 もし使えれば、非常に簡潔で分かりやすくていいわ!と思ったのですが残念です。 もう少しいろいろ調べてみます。 回答どうもありがとうございました。
- prome
- ベストアンサー率32% (64/196)
このAPIをVBで使ったことはないんですが、Delphiで使おうと思って、 いろいろ調べていました。 VBで使う方法は下記URL「へろぱのページ」に詳しく載っているようです。 私自身試したわけではありませんが、信頼できるサイトですので、 一度ご覧になって試してみてください。
お礼
こんにちは。 実はこのサイト、もう参考にさせてもらったんです(笑)。でもイマイチ理解できなくて…改めてちゃんとみてみます。 回答どうもありがとうございました。
お礼
こんにちは。 taka_tetsuさん、お手数おかけしてすみません。参考URL、ちゃんと最後まで読んでませんでした。わざわざチェックのためのスクリプトまで教えていただいて、ほんとありがとうございます。おっしゃる通りコピーして実行したらちゃんとできました!早速自分が作ったプログラムも修正したら、ちゃんと動作しました。 回答どうもありがとうございました。