質問

このコードを使用してフォルダを選択することができます:

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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top