Excel VBA:在源文件夹中创build子文件夹和文件的列表

我正在使用下面的代码来列出主机文件夹中的所有文件,它是子文件夹。 代码工作的很好,但是,你知道我可以如何更新代码也列出一些文件属性。

Sub file_list() Call ListFilesInFolder("W:\ISO 9001\INTEGRATED_PLANNING\", True) End Sub Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean) Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long Set FSO = CreateObject("Scripting.FileSystemObject") Set SourceFolder = FSO.getFolder(SourceFolderName) r = Range("A65536").End(xlUp).Row + 1 For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name r = r + 1 X = SourceFolder.Path Next FileItem If IncludeSubfolders Then For Each SubFolder In SourceFolder.Subfolders ListFilesInFolder SubFolder.Path, True Next SubFolder End If Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing End Sub Function GetFileOwner(ByVal FilePath As String, ByVal FileName As String) Dim objFolder As Object Dim objFolderItem As Object Dim objShell As Object FileName = StrConv(FileName, vbUnicode) FilePath = StrConv(FilePath, vbUnicode) Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(StrConv(FilePath, vbFromUnicode)) If Not objFolder Is Nothing Then Set objFolderItem = objFolder.ParseName(StrConv(FileName, vbFromUnicode)) End If If Not objFolderItem Is Nothing Then GetFileOwner = objFolder.GetDetailsOf(objFolderItem, 8) Else GetFileOwner = "" End If Set objShell = Nothing Set objFolder = Nothing Set objFolderItem = Nothing End Function 

我真正想看到的是

列A =主机文件夹/子文件夹

B列=文件名

列C =超链接到文件

这可能吗?

我有一个创build超链接的代码,但是,我不知道如何添加到现有的代码。

 Sub startIt() Dim FileSystem As Object Dim HostFolder As String HostFolder = "W:\ISO 9001\INTEGRATED_PLANNING\" Set FileSystem = CreateObject("Scripting.FileSystemObject") DoFolder FileSystem.GetFolder(HostFolder) End Sub Sub DoFolder(Folder) Dim SubFolder For Each SubFolder In Folder.Subfolders DoFolder SubFolder Next i = Cells(Rows.Count, 1).End(xlUp).Row + 1 Dim File For Each File In Folder.Files ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:= _ File.Path, TextToDisplay:=File.Name i = i + 1 Next End Sub 

您可以在这里看到File对象支持的属性列表: https : //msdn.microsoft.com/en-us/library/1ft05taf(v=vs.84).aspx

所以你可以增强你的代码,在.Name属性的地方,把它放在一个单元格公式中,做一些与其他属性类似的东西,比如文件的.Type

 For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name Cells(r, 2).Value = FileItem.Type ActiveSheet.Hyperlinks.Add Anchor:=Cells(r, 3), Address:= _ FileItem.Path, TextToDisplay:=FileItem.Name r = r + 1 X = SourceFolder.Path Next FileItem 

NB我用价值而不是公式,但在这种情况下,结果将是相同的。

以类似的方式,您可以添加另一个Cells(r, 3).Value =行来设置当前行r和列3的单元格的值,无论您的超链接是什么。

为此,我为同事写了一个小脚本,

看到我的代码如下:

 Sub FolderNames() 'Written by Daniel Elmnas Last update 2016-02-17 Application.ScreenUpdating = False Dim xPath As String Dim xWs As Worksheet Dim fso As Object, j As Long, folder1 As Object With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Choose the folder" .Show End With On Error Resume Next xPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) & "\" Application.Workbooks.Add Set xWs = Application.ActiveSheet xWs.Cells(1, 1).Value = xPath xWs.Cells(2, 1).Resize(1, 5).Value = Array("Subfolder", "Hostfolder", "Filename", "Date Created", "Date Last Modified") Set fso = CreateObject("Scripting.FileSystemObject") Set folder1 = fso.getFolder(xPath) getSubFolder folder1 xWs.Cells(2, 1).Resize(1, 5).Interior.Color = 65535 xWs.Cells(2, 1).Resize(1, 5).EntireColumn.AutoFit Application.ScreenUpdating = True End Sub Sub getSubFolder(ByRef prntfld As Object) Dim SubFolder As Object Dim subfld As Object Dim xRow As Long For Each SubFolder In prntfld.SubFolders xRow = Range("A1").End(xlDown).Row + 1 Cells(xRow, 1).Resize(1, 5).Value = Array(SubFolder.Path, Left(SubFolder.Path, InStrRev(SubFolder.Path, "\")), SubFolder.Name, SubFolder.DateCreated, SubFolder.DateLastModified) Next SubFolder For Each subfld In prntfld.SubFolders getSubFolder subfld Next subfld End Sub 

结果如下: 在这里输入图像说明

你可以稍微修改一下。

如果你不想使用窗口对话框,而是使用“W:\ ISO 9001 \ INTEGRATED_PLANNING \”

干杯!