- 締切済み
エクセル マクロで任意のフォルダのパスを取得する方法
エクセルを使用して、任意のフォルダを指定し、その中に入っているファイル(jpg画像ファイル)の名前を取得、画像をエクセルシート内に貼り付けていくというマクロを作成しています。 今回質問はその前段の部分、使用者が任意のフォルダを指定して、そのフォルダのパスをマクロが取得するというところでてこずっています。 現時点では、画像が入っているフォルダのウィンドウのアドレスバーに入っているパスを、コピぺでフォームに貼り付けさせてます^^; それだと使用者にウインドウにアドレスバーを表示するには…みたいなところから説明しなければならないのでユーザーライクではありません。 そこで、通常良くあるような、フォルダやファイルを指定させるダイアログを出したり、もしくはフォームに任意のフォルダをドラッグ&ドロップしたりすることで、任意のフォルダのパスを取得できたらな、と思っています。 そのような方法(もしくはより良い方法)を実現するマクロの組み方をご存知でしたら、教えてくださいm(__)m 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- anotherone
- ベストアンサー率54% (35/64)
Set myWSH = CreateObject("WScript.Shell") myDT = myWSH.SpecialFolders("Desktop") Set myWSH = Nothing Set mySh = CreateObject("Shell.Application") Set myPath = mySh.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, myDT) If myPATH Is Nothing Then MsgBox "フォルダ未選択(終了)" Exit Sub End If フォルダ = myPath.Items.Item.Path Set mySh = Nothing Set myPath = Nothing '個別ファイル 拡張子判断 Set myFS = CreateObject("Scripting.FileSystemObject") For Each myF In myFS.GetFolder(フォルダ).Files If LCase(myFS.GetExtensionName(myF)) = "jpg" Then End If Next Set myFS = Nothing
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 これは、任意ではありませんが、 Application.Dialogs(xlDialogInsertPicture).Show 画像ファイルを挿入するダイアログです。 >フォームに任意のフォルダをドラッグ&ドロップしたりすることで、 ユーザーフォームのことだと思いますが、以下のように、リストビューを使えば、任意のフォルダが取れます。ただし、エクスプローラなどが必要です。 'これは、リストビューのプロパティを直接換えれば、起動時の設定はいりません。 Private Sub UserForm_Initialize() With Me.ListView1 .OLEDragMode = 1 .OLEDropMode = 1 .View = 2 End With End Sub Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) Dim i As Long With Me AppActivate .Caption .ListView1.ListItems.Clear If Data.Files.Count < 1 Then Exit Sub MsgBox Mid(Data.Files(1), 1, InStrRev(Data.Files(1), "\")) End With End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
質問がもうひとつ良く理解できてませんが、下記でどうですか。 Sub test03() x = Application.GetOpenFilename MsgBox x p = InStrRev(x, "\") MsgBox Mid(x, 1, p - 1) End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
これではいかがでしょう? Sub TEST01() Dim ShellApp As Object Dim myFolder As Object Set ShellApp = CreateObject("Shell.Application") Set myFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) If myFolder Is Nothing Then Exit Sub MsgBox myFolder.items.Item.Path, vbOKOnly, " フルパスだよ。( ̄ー ̄)v" End Sub