excel 根据单元格输入和输出读取文件夹中的所有文件到另一单元格

pftdvrlh  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一个电子表格,文件夹位置在E22中,空白处在D22中。
我想读取文件夹位置(在E22中),然后将所有文件输出到空白处(在D22中)。
虽然看起来除了我列出的错误消息之外,我没有返回任何东西。

  • 旁注:网络位置是否会发生任何变化?*
Function GetAllFileNames(ByVal FolderPath As String) As Variant
Dim Result As Variant
Dim FileName As Variant
Dim i As Integer

FileName = Dir(FolderPath)

i = 1
Do While FileName <> ""
    Result(i) = FileName
    i = i + 1
    FileName = Dir()
Loop

GetAllFileNames = Result

End Function

在我想插入结果的单元格中:

=IFERROR(INDEX(GetAllFileNames($E$22),ROW()),"na")
llycmphe

llycmphe1#

你的数组从未被初始化,所以它不能接收数据。然后你需要在插入每个新元素之前对它进行Redim。最后,你需要将数组转置为“列”格式,否则它将是“行”格式,你的INDEX函数将无法工作。

Function GetAllFileNames(ByVal FolderPath As String) As Variant
    Dim Result As Variant
    Dim FileName As Variant
    Dim i As Integer
    
    FileName = Dir(FolderPath)
    
    ReDim Result(1 To 1)  'Initialize array
    
    i = 1
    Do While FileName <> ""
        Result(i) = FileName
        i = i + 1
        FileName = Dir()
        If FileName <> "" Then ReDim Preserve Result(1 To UBound(Result) + 1)
    Loop
    
    GetAllFileNames = Application.Transpose(Result)  'Transpose array

End Function

也可以使用FileSystemObject

Function GetAllFileNames(FolderPath As String) As Variant
    Dim FSO As Object 'Or you can use New FileSystemObject   'Reference: Microsoft Scripting Runtime
    Dim myFolder As Object 'Folder
    Dim mySubFolder As Object 'Folder
    Dim MyFile As Object 'File
    Dim i As Long
    Dim Result As Variant

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set myFolder = FSO.GetFolder(FolderPath)
    
    ReDim Result(1 To myFolder.Files.Count)
    i = 1
    For Each MyFile In myFolder.Files
        Result(i) = MyFile.Name
        i = i + 1
    Next MyFile

    GetAllFileNames = Application.Transpose(Result)
End Function

相关问题