Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在工作表中列出特定目录和字符数的文件名和路径_Vba_File_Extension Methods - Fatal编程技术网

Vba 在工作表中列出特定目录和字符数的文件名和路径

Vba 在工作表中列出特定目录和字符数的文件名和路径,vba,file,extension-methods,Vba,File,Extension Methods,我已经尝试并搜索了vba论坛,以找出如何更正我的代码(如下)以搜索特定目录及其子目录中的文件,列出并填充文件名长度为20个字符且仅为pdf扩展名的文件列表 我想在A列的末尾列出没有扩展名的文件,在B列列出完整的文件路径和名称 还尝试在创建列表后对所有文件进行升序排序,但尚未成功:( 需要帮忙吗?谢谢 Sub ListPDF() Range("A:L").ClearContents Range("A1").Select Dim strPath As String strPath = "K:\T

我已经尝试并搜索了vba论坛,以找出如何更正我的代码(如下)以搜索特定目录及其子目录中的文件,列出并填充文件名长度为20个字符且仅为pdf扩展名的文件列表

我想在A列的末尾列出没有扩展名的文件,在B列列出完整的文件路径和名称

还尝试在创建列表后对所有文件进行升序排序,但尚未成功:( 需要帮忙吗?谢谢

Sub ListPDF()

Range("A:L").ClearContents
Range("A1").Select

Dim strPath As String
strPath = "K:\Test\PDF\"
Dim OBJ As Object, Folder As Object, File As Object
Set OBJ = CreateObject("Scripting.FileSystemObject")
Set Folder = OBJ.GetFolder(strPath)
Call ListFiles(Folder)
Dim SubFolder As Object
For Each SubFolder In Folder.Subfolders
    Call ListFiles(SubFolder)
    Call GetSubFolders(SubFolder)
Next SubFolder
Range("A1").Select
End Sub

Sub ListFiles(ByRef Folder As Object)
For Each File In Folder.Files
       ActiveCell.Offset(1, 0).Select
        ActiveCell.Offset(0, 0) = File.Name
        ActiveCell.Offset(0, 1) = File.Path
Next File
End Sub

Sub GetSubFolders(ByRef SubFolder As Object)
    Dim FolderItem As Object
    For Each FolderItem In SubFolder.Subfolders
    Call ListFiles(FolderItem)
    Call GetSubFolders(FolderItem)
Next FolderItem
End Sub
使用以下命令:



使用以下命令:




嗨,马特,能澄清一点吗?你提到你只想要一个.pdf文件的列表,但是你提到了一个没有扩展名的列表。这是不是意味着你想要两个.pdf文件和没有扩展名的文件?嗨,德曼,不,我只想列出pdf文件。有没有办法将这个pdf文件显示到a列中,没有扩展名。类似于d的正确公式代码中的文件列表中的elete.pdf。清楚吗?不?嗨,马特,能澄清一点吗?你提到你只想要一个.pdf文件列表,但是你提到了一个没有扩展名的列表。这是否意味着你同时想要.pdf文件和没有扩展名的文件?嗨,德曼,不,我只想列出pdf文件。有没有办法将这个pdf文件显示到a列中,并带有no扩展名。类似于从代码中的文件列表中删除.pdf的正确公式。清楚吗?不?非常感谢!!!paul bica:)我花了几个小时的时间,在键盘上敲打我的头,试图找到一种实现这一点的方法。。。。你提供了一个解决方案,可以同时保存我的键盘和脑袋!这就像一个魅力,我真的很感谢你花时间来帮助我!!如何查找当前工作簿目录的父目录的地址代码?我希望它是独立的,无论我把它放在哪里。ThanksI在ListPDFs()中进行了更新,以查看当前文件夹的父文件夹(与中相同)谢谢paul bica…我感谢您的帮助非常感谢!!!保罗·比卡:)我花了几个小时的时间,在键盘上敲打我的头,试图找到实现这个目标的方法。。。。你提供了一个解决方案,可以同时保存我的键盘和脑袋!这就像一个魅力,我真的很感谢你花时间来帮助我!!如何查找当前工作簿目录的父目录的地址代码?我希望它是独立的,无论我把它放在哪里。ThanksI在ListPDFs()中进行了更新,以查看当前文件夹的父文件夹(与中相同)谢谢paul bica…我感谢您的帮助
Option Explicit

Dim fso As Object, fsoFolder As Object, fsoSubFolder As Object, fsoFile As Object

Public Sub ListPDFs()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("Sheet1")

    ws.UsedRange.ClearContents

    Set fso = CreateObject("Scripting.FileSystemObject")

    Application.ScreenUpdating = False

        ShowPDFs ThisWorkbook.Path & "\..", ws

        ws.UsedRange.EntireColumn.AutoFit

    Application.ScreenUpdating = True

End Sub
Public Sub ShowPDFs(ByRef fsoPath As String, ByRef ws As Worksheet)
    Dim lastCell As Range, pdfName As String

    Set fsoFolder = fso.GetFolder(fsoPath)

    For Each fsoFile In fsoFolder.Files

        pdfName = fsoFile.Name

        If Len(pdfName) > 20 Then
            If InStr(1, pdfName, ".pdf") > 0 Then

                pdfName = Left(pdfName, InStrRev(pdfName, ".") - 1)
                Set lastCell = ws.Cells(ws.Rows.Count, 1).End(xlUp)

                lastCell.Offset(1, 0) = pdfName
                lastCell.Offset(1, 1) = fsoFile.Path
            End If
        End If
    Next

    For Each fsoSubFolder In fsoFolder.SubFolders
        ShowPDFs fsoSubFolder.Path, ws
    Next
End Sub