- ベストアンサー
エクセルVBA、フォルダ選択時のパスを指定するには?
VBAでフォルダを選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 #1です。 >このような手法はどこかWebに載っているのでしょうか? 本当は、MSDNといいたかったけれども、見当たらなかったです。 以前は、そちらで収録したつもりだったのですが……。 私が、他で参考にしていたところは、以下のサイトです。 http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/ 書籍もほしいと思いましたが、最近、半分以上は、もう少し上の段階の技術が混じってきて、敷居が高いです。 >上位のフォルダ及びその配下のフォルダを選択させたい場合 今、試してみましたが、このAPI関数で、出来ますね。 http://www.alato.ne.jp/kazu-/vb/tip06.htm 今回のような場合は、hwnd を、0 にしてかまわないと思います。 一応、Excel2000以上なら大丈夫です。
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
既に解決済みのようですが。。 > 特定のフォルダ以下を選択する場合はこのやり方でOKだと思いますが、 > 上位のフォルダ及び... CreateObject("Shell.Application") の BrowseForFolder では無理です。 SHBrowseForFolder API でフォルダ選択ダイアログを呼び出すか、 簡単に済ますなら Excel2002 以降限定になりますけど FileDialog で FolderPicker を使うとか。 参考URL: http://officetanaka.net/excel/vba/tips/tips39.htm http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_020_110.html
お礼
回答ありがとうございます。 主に使う職場のエクセルはExcel2000です。 FolderPickerが使えないのが残念です。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 以下のように換えればよいのではありませんか? Const STARTFOLDER As String ="任意のフォルダ" Set myFolder = mySh.BrowseForFolder(0, msg, &H0, STARTFOLDER)
お礼
回答ありがとうございます。 実行しました。上手く行きましたありがとうございます。 このような手法はどこかWebに載っているのでしょうか? また参考書などがあるのでしょうか? もしご存知でしたら教えていただけないでしょうか? よろしくお願い申し上げます。 それと参考までに教えてください。 特定のフォルダ以下を選択する場合はこのやり方でOKだと思いますが、上位のフォルダ及びその配下のフォルダを選択させたい場合もある時などはどのような方法がありますでしょうか? よろしくお願い申し上げます。
お礼
回答ありがとうございます。 2番目の方法が一番いいみたいですね。 自宅のExcel2003で試して大丈夫でした。 職場は記憶媒体持込禁止なので、頑張ってタイピングしたいと思います。 ありがとうございました。