Excel将文件夹中的文件列表加载到包含单击内容的工作表中

美好的一天。

我正在寻找一个问题的解决scheme,在我有数以百计的CSV文件位于文件夹/嵌套文件夹。

我试图编写一个VBA脚本,它将这个目录中的文件列表加载到Excel的工作表1中,作为每个文件的软链接。 当一个链接被点击,我期待文件内容被加载到工作表2,这将用于进一步的报告目的。

我已经尝试编写一个VB脚本来提取文件夹内容的列表,但是,我不能让他们转换为软链接并加载文件内容。 任何build议如何(其他)可以实现吗?

任何在这方面的帮助,高度赞赏。 提前致谢。

将有2个部分的代码。 第一个代码将进入一个模块列出文件夹和地址中的文件的名称。 第一列将是地名,第二列将是地址

Sub ListFiles() Dim wb As Workbook Dim ws As Worksheet Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Dim i As Long Set wb = ActiveWorkbook '<-- Master workbook Set ws = wb.Sheets("Sheet1") '<-- Sheet you store file names and addresses Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\youfolderaddress") i = 1 For Each objFile In objFolder.Files ws.Cells(i + 1, 1) = objFile.Name ws.Cells(i + 1, 2) = objFile.Path i = i + 1 Next objFile End Sub 

第二部分将转到您存储文件列表的工作表中,我们将使用工作select更改:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim wb As Workbook Dim ws1, ws2 As Worksheet Dim newBook As Workbook Dim newSheet As Worksheet Set wb = ActiveWorkbook '<- Master workbook with all list etc. Set ws1 = wb.Sheets("Sheet1") '<-- Sheet that contains the list Set ws2 = wb.Sheets("Sheet2") '<-- Sheet that will display csv content If Target.Column = 2 And Target.Value <> "" Then '2 is the number of the column that contains file addresses ws2.Cells.ClearContents Workbooks.Open Filename:=Target.Value Set newBook = ActiveWorkbook Set newSheet = newBook.ActiveSheet newSheet.Cells.Copy ws2.Activate ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste Application.DisplayAlerts = False newBook.Close Application.DisplayAlerts = True End If End Sub 

你可以使用事件处理程序。 我假设你可以将名字加载到表单1中,并设置一个范围variables等于结果范围内的名字。 然后,您可以使用select更改事件来触发加载代码,如下所示(在sheet1代码模块中)。 点击包含文件名的单元格将会显示该名称:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim fnames As Range Set fnames = Range("fnames") 'adjust to match your code If Union(Target, fnames).Address = fnames.Address And _ Target.Cells.Count = 1 Then MsgBox Target.Value 'replace this by code to load csv in sheet 2 End If End Sub 

有了这个代码,你可以用一个默认的目录,检索文件列表,并添加到该文件列表(链接)的工作表。 您可以更改此代码以select不同的目录

 Sub ListAllFile() Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Dim ws As Worksheet Set objFSO = CreateObject("Scripting.FileSystemObject") Set ws = Worksheets.Add 'Get the folder object associated with the directory Set objFolder = objFSO.GetFolder("C:\Users\Desktop\Code\Excel") ws.Cells(1, 1).Value = "The files found in " & objFolder.Name & "are:" 'Loop through the Files collection For Each objFile In objFolder.Files ws.Cells(ws.UsedRange.Rows.Count + 1, 1).Select Selection.Hyperlinks.Add Anchor:=Selection, Address:=objFile.Name Next 'Clean up! Set objFolder = Nothing Set objFile = Nothing Set objFSO = Nothing End Sub