• ベストアンサー

エクセル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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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以上なら大丈夫です。

believe_me
質問者

お礼

回答ありがとうございます。 2番目の方法が一番いいみたいですね。 自宅のExcel2003で試して大丈夫でした。 職場は記憶媒体持込禁止なので、頑張ってタイピングしたいと思います。 ありがとうございました。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

既に解決済みのようですが。。 > 特定のフォルダ以下を選択する場合はこのやり方で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

believe_me
質問者

お礼

回答ありがとうございます。 主に使う職場のエクセルはExcel2000です。 FolderPickerが使えないのが残念です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 以下のように換えればよいのではありませんか? Const STARTFOLDER As String ="任意のフォルダ" Set myFolder = mySh.BrowseForFolder(0, msg, &H0, STARTFOLDER)

believe_me
質問者

お礼

回答ありがとうございます。 実行しました。上手く行きましたありがとうございます。 このような手法はどこかWebに載っているのでしょうか? また参考書などがあるのでしょうか? もしご存知でしたら教えていただけないでしょうか? よろしくお願い申し上げます。 それと参考までに教えてください。 特定のフォルダ以下を選択する場合はこのやり方でOKだと思いますが、上位のフォルダ及びその配下のフォルダを選択させたい場合もある時などはどのような方法がありますでしょうか? よろしくお願い申し上げます。

関連するQ&A

  • 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

  • VBAでのフォルダ指定方法について

    EXCELファイルが保存されているディレクトリ配下のフォルダーを指定できるようにしたくていろいろ試してみたのですが、うまくいきません。 どなたか、お知恵をお貸しください。 以下ソースです。 Private Sub CommandButton1_Click() Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath) If Not oFolder Is Nothing Then TextBox1.Value = oFolder.Items.Item.Path End If Set ShellApp = Nothing Set oFolder = Nothing End Sub

  • 【Excel VBA】選択フォルダへの相対パス

    色々なサイトを参考に、Excel VBAにて以下の様なロジックを作りました。 -------------- Dim SHELL, MYPATH Dim TARGETDIR As String Set SHELL = CreateObject("Shell.Application") Set MYPATH = SHELL.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, ThisWorkbook.Path) If MYPATH Is Nothing Then End TARGETDIR = MYPATH.items.Item.Path Set SHELL = Nothing Set MYPATH = Nothing -------------- ブックのあるパス配下のフォルダを選択して、フルパスを"TARGETDIR"に格納します。 質問は2つです。 (1)"~.items.Item.Path"の構文の意味を教えて下さい。 (2)フルパスではなく"ブックのあるパスから見た、選択したフォルダへの相対パス"を知る方法を教えて下さい。 よろしくお願いします。

  • ダイレクトに目的のフォルダを指定する方法は?

    全てのフォルダをループするのではなく、 ダイレクトに目的のフォルダを指定する方法はありますか? アクセスからアウトルックの該当のフォルダの中身を取得したいのですが 下記コードで目的通り取得できるのですが コードが遠回りの気がします。 ダイレクトにフォルダを指定する方法があれば教えてください。 Sub test() Dim myNaSp As Namespace Dim myFolder As MAPIFolder Dim mySecFolder As MAPIFolder Dim myThrFolder As MAPIFolder Dim FolderName As String Dim myItem As MailItem Dim myindex As Long Set cn = CurrentProject.Connection Set myNaSp = GetNamespace("MAPI") For Each myFolder In myNaSp.GetDefaultFolder(olFolderInbox).Folders For myindex = 1 To myFolder.Items.Count Set myItem = myFolder.Items(myindex) If myFolder.Name = "testフォルダ" Then Debug.Print myItem.Body End If Next Next Set myNaSp = Nothing Set myFolder = Nothing End Sub

  • VBA 一つのフォルダの中のフォルダ名とファイル名

    一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?

  • フォルダ選択と取得したパスの表示

    どうしてもわからないのでご教授お願いします。 コマンドボタンを使用して、フォルダの選択のダイアログを表示し、選択したフォルダのパスを取得することはできたのですが、そこから取得したパスを任意のセルに表示させたいです。 どうすれば表示させることができるでしょうか。 Private Sub commandbutton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub ご教授宜しくお願いします。

  • エクセルVBAで指定フォルダ内の選択ファイル名の取得

    お世話になります。 エクセルVBA昨日から始めた初心者です。 いま、 Private Sub CommandButton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "\\hk001a24\va\data\ツール") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub というの作成したのですが、 これだとフォルダの選択しか出来ませんでした。 \\hk001a24\va\data\ツールの下にあるファイルを選択出来て、その選択したファイル名をVBA取得して保持できる ようにしたいのですが・・・ 急いでいるのでここで質問させて頂きました。 よろしくお願いします。

  • エクセル VBA フォルダを閉じる

    いつもお世話になっております。 下記のプロシージャでフォルダを開いているのですが、このフォルダを閉じる場合はどのように記述すればよろしいのでしょうか? よろしくお願いいたします。 Sub opn_fld() Dim myFol As String, mymsg As Integer Dim IE As Object myFol = "C:\ABC\" Shell "C:\Windows\Explorer.exe " & myFol, vbNormalFocus End Sub

  • エクセルVBAで質問です

    下のコードをみつけました。 質問が二つあります。 1.エラーになります。 実行するとユーザー定義型は定義されていません、と出ます。どこが不具合でしょうか?おなじように記述したつもりですが・・・ 2.コードでは、Cドライブの中にあるフォルダに固定されていますが、これをウィンドウを表示させて、検索したいフォルダを選択させて調べるようにできますか? どうぞよろしくお願いします。 Sub フォルダ取得() Dim myFSO As New FileSystemObject Dim myFolders As Folders Dim myFolder As folder Dim i As Integer Set myFolders = myFSO.GetFolder("C:\").SubFolders i = 1 For Each myFolder In myFolders Cells(i + 1, 1).Value = myFolder.Name i = i + 1 Next End Sub

  • エクセルVBAで、IEからコピーするには

    エクセル2000,win2000,IE6です。 次のような、コードを書きました。 Sub t03ccc() Dim objIE As Object 'IE オブジェクト参照用 Dim objShell As Object 'Shell オブジェクト参照用 Dim objWindow As Object 'Window オブジェクト参照用 Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows '起動中のタイトルを探して。 If Left(objWindow.document.Title, 7) = "Office系" Then Set objIE = objWindow 'オブジェクトを代入 Msg = "Office系" Exit For End If Next If Msg <> "Office系" Then MsgBox "・・・スクリーニング結果一覧・・・がありません" Exit Sub End If objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択 objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー Sheets("Sheet3").Select Rows("1:200").ClearContents Range("A1").Select ActiveSheet.Paste '''' objIE.Quit Set objIE = Nothing Set objShell = Nothing Set objWindow = Nothing End Sub これで、エクセルとIEしか開いてないときは巧くいくのですが、 エクスプローラーを同時に開くと実行時エラー438が出ます。 よろしくお願いします。

専門家に質問してみよう