dポイントプレゼントキャンペーン実施中!

エクセルを使用して、任意のフォルダを指定し、その中に入っているファイル(jpg画像ファイル)の名前を取得、画像をエクセルシート内に貼り付けていくというマクロを作成しています。

今回質問はその前段の部分、使用者が任意のフォルダを指定して、そのフォルダのパスをマクロが取得するというところでてこずっています。

現時点では、画像が入っているフォルダのウィンドウのアドレスバーに入っているパスを、コピぺでフォームに貼り付けさせてます^^;
それだと使用者にウインドウにアドレスバーを表示するには…みたいなところから説明しなければならないのでユーザーライクではありません。

そこで、通常良くあるような、フォルダやファイルを指定させるダイアログを出したり、もしくはフォームに任意のフォルダをドラッグ&ドロップしたりすることで、任意のフォルダのパスを取得できたらな、と思っています。

そのような方法(もしくはより良い方法)を実現するマクロの組み方をご存知でしたら、教えてくださいm(__)m
宜しくお願いします。

A 回答 (4件)

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
    • good
    • 0

こんばんは。



これは、任意ではありませんが、

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
    • good
    • 2

質問がもうひとつ良く理解できてませんが、下記でどうですか。


Sub test03()
x = Application.GetOpenFilename
MsgBox x
p = InStrRev(x, "\")
MsgBox Mid(x, 1, p - 1)
End Sub
    • good
    • 1

これではいかがでしょう?



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
    • good
    • 0

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