VBA - フォルダの選択とそれを別のコードのパスとして参照
質問
このコードを使用してフォルダを選択することができます:
Sub ChooseFolder()
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Sub
.
私はこのコードを持っています。これは、フォルダパスがハードコードされているときに機能します。基本的に、それは私が後で別のセクションで使用するファイル名とファイルパスのリストを与えます。現在、ハードコードフォルダパスをコメントアウトしています。
Private Sub btn_LeaveReport()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
'Set objFolder = objFSO.GetFolder("D:\Administration\Time Sheets")
Set objFolder = objFSO.GetFolder(ChooseFolder)
i = 3
'loops through each file in the directory and prints their names and path
For Each objFile In objFolder.Files
'print file name
Cells(i + 1, 2) = objFile.Name
'print file path
Cells(i + 1, 3) = objFile.Path
i = i + 1
Next objFile
End Sub
.
しかし、2つの異なるコードセットを一緒に取り組む方法はわかりません。私が変更する必要がある部分唯一の部分を推測しています:
Set objFolder = objFSO.GetFolder(ChooseFolder)
.
私は今のところ上記のサブであるChoosefolderとして持っていますが、明らかにそれについて行く方法ではありません。私はSitemでそれを試してみましたが、それはうまくいかないようです。
解決
ちょうど私のコメントをより良い説明で構築するために、ChooseFolder
をサブとして定義しました。サブは値を返しません。ただし、これを実行するときは、関数として使用しています。
Set objFolder = objFSO.GetFolder(ChooseFolder)
.
ChooseFolder
を実行している結果をFSOのGetFolder
関数に渡しているためです。
あなたがするべきことは関数としてChooseFolder
を宣言することです。
基本的に、ChooseFolder
サブをこれに置き換えます。
Function ChooseFolder() As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
ChooseFolder = sItem
Set fldr = Nothing
End Function
.
そしてそれはあなたが期待するものをするべきです。あなたのコードの残りの部分は大丈夫です。
他のヒント
choosefolder()を関数にしてから参照してください:
Public Function ChooseFolder()
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
ChooseFolder = sItem
Set fldr = Nothing
End Function
Private Sub btn_LeaveReport()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
Dim sFldr As String
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
sFldr = ChooseFolder()
Set objFolder = objFSO.GetFolder(sFldr)
i = 3
'loops through each file in the directory and prints their names and path
For Each objFile In objFolder.Files
'print file name
Cells(i + 1, 2) = objFile.Name
'print file path
Cells(i + 1, 3) = objFile.Path
i = i + 1
Next objFile
End Sub
. 所属していません StackOverflow