質問

お世話になります。
タイトルのままなんですが、
VBAでフォルダのフルパスを取得したいのですが出来るでしょうか?
ファイルのフルパスは FN = Application.GetOpenFilename で取得出来たのですが
同じ様に ダイアログから選択する様に出来るでしょうか?

通報する

回答 (4件)

>> VBAでフォルダのフルパスを取得したいのですが出来るでしょうか?

> フォルダを選ぶと、そのフォルダの中のファイルを
> 全部表示するようにしたいのです。

うぅ~ん どっちなんでしょうかね。
なんか趣旨が一貫していないような気がしますが・・・

ホルダだけ指定するのであれば、組込みのダイアログを使用するのは、
無理があると思います。

それであればフォルダ名を選択するフォームを作ったら如何でしょうか。

選択するホルダは、ある1個のホルダの中の複数のホルダということで
いいのですか?

下記の例は、フォームにリストボックスとコマンドボタンを配置し、
そのリストボックスに表示されたフォルダの中から選択するように
したものです。

例では、ユーザーフォームの名前を UserForm1、リストボックスの名前を
ListBox1 とします。
"c:\test\"の中のホルダをリストボックスに表示し、選択したホルダの
中の標準ファイルだけをMsgBoxに表示します。

やりたいことがいまいち解りませんので、外れているかも知れませんが、
推測したところでは、こんな感じです。

Public MyPath As String
Sub test2()
Dim MyName As String
MyPath = "c:\test\"
MyName = Dir(MyPath, vbDirectory)
UserForm1.Show (vbModeless)
UserForm1.ListBox1.Clear
Do While MyName <> ""
  If MyName <> "." And MyName <> ".." Then
    If (GetAttr(MyPath & MyName) And vbDirectory) = _
      vbDirectory Then
      With UserForm1.ListBox1
        .AddItem MyName
        .ListIndex = 0
      End With
    End If
  End If
  MyName = Dir
Loop
End Sub

Private Sub CommandButton1_Click()
Dim FName As String
Dim Rw As Integer
Dim FNdsp As String
MyPath = MyPath & Me.ListBox1.Value & "\"
FName = Dir(MyPath, vbNormal)
Do While FName <> ""
  If FName <> "." And FName <> ".." Then
    If (GetAttr(MyPath & FName) And vbNormal) = _
      vbNormal Then
      Rw = Rw + 1
'      Cells(Rw, 1).Value = FName
      FNdsp = FNdsp & MyPath & FName & vbCrLf
    End If
  End If
  FName = Dir
Loop
UserForm1.Hide
MsgBox FNdsp
End Sub

この回答へのお礼

回答ありがとうございました。
無事解決することができました。
また、疑問がありましたら
よろしくお願いします。

この回答への補足

すみません、質問がごちゃごちゃしてしまいました。
今作ってるのが、フォルダ名をセルに入れてVBAを実行すると
セルにファイルのリストを表示するものなので
そのフォルダ名を簡単に取得出来ないものかと調べていました。

こんな使い方が正しいかどうか分かりませんし、ご希望のものとは少し違うかもしれませんが、参考までに…。

Sub Test2()
  Dim FileName As Variant
  FileName = Application.GetSaveAsFilename _
    (InitialFileName _
       :="フォルダを選択してください", _
    FileFilter:="(*.---),*", _
    Title:="フォルダの選択")
  If FileName = False Then Exit Sub
  MsgBox Mid(FileName, 1, _
     InStrRev(FileName, "\") - 1)
End Sub

この回答へのお礼

回答ありがとうございました。
無事解決することができました。
また、疑問がありましたら
よろしくお願いします。 

この回答への補足

なかなか いい感じに出来ました。
ありがとうございます。

こんなのはどうでしょう、他にもっと良い方法があるのかもしれませんが。

Sub Test()
  Dim FileName As Variant
  FileName = Application.GetOpenFilename _
       ("JPEGファイル (*.jpg),*.jpg")
  If FileName = False Then Exit Sub
  MsgBox Mid(FileName, 1, _
        InStrRev(FileName, "\") - 1)
End Sub

この回答への補足

回答ありがとうございます。
このVBAと同じように、ファイルを選択してフォルダ名を取得するようにしてるのですが
これを、直にフォルダを選ぶようにしたいのです。
よろしくお願いします。

一例ですが、下記のコードは、ファイル選択ダイアログからファイル(複数可)を
選択し、フルパスでファイル名をアクティブシートのA1から下へ書き込みます。

Sub test1()
  Dim FName As Variant
  Dim I As Integer
  FName = Application.GetOpenFilename _
    ("Excelファイル (*.xls), *.xls", , , , True)
    For I = 1 To UBound(FName)
      ActiveSheet.Cells(I, 1).Value = FName(I)
    Next I
End Sub

こんなもので、どうにか参考になりませんか。

この回答への補足

回答ありがとうございます。
同じ様なのは、作れたのですが、
フォルダを選ぶと、そのフォルダの中のファイルを
全部表示するようにしたいのです。
わかりましたら、よろしくお願いします。

このQ&Aは役に立ちましたか?0 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

フリーアナウンサー長谷川豊氏の新コーナー「このニュースどう思います?」がスタート!

元フジテレビのフリーアナウンサー長谷川豊氏から気になるニュースについておしトピの皆さんに質問します! 皆さんの意見をもとに長谷川豊氏がコラムを執筆します! アプリリリース記念として最大1万分のアマゾンギフト券プレゼントキャンペーンも実施中!


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集