首页 > 解决方案 > 通过单个工作簿运行文件夹中的所有文件

问题描述

如果我夸大了我的困境,我深表歉意。我想确保我很清楚。

我有一个包含我编写的宏的工作簿,用于分析和整合大量数据。工作簿本身有两个工作表:“数据输入”和“输出”。数据输入在第一行中有宏按钮,因此数据从单元格“A2”开始。输出是放置结束数据的位置,从单元格“A1”开始。

我想做的是建立在宏的基础上,用于在单个进程中处理多个原始数据文件。请记住,不会打开任何原始数据文件。只有一个运行这个宏。我想要工作簿本身:

  1. 从文件夹中的所有文件中提取工作表数据,一次一个。此文件夹中将有可变数量的文件。(为了澄清,放置在此文件夹中的每个原始数据文件都是一个工作表,数据从单元格“A1”开始,所述文件的名称会有所不同)
  2. 从文件中提取所述数据并将其导入单元格“A2”的“数据条目”
  3. 运行我的代码,处理数据并将其转储到工作表“输出”中。(值得注意的是“数据输入”为30列宽,行长可变,输出的列和行长可变)
  4. 获取工作表“输出”中的内容,将其返回到它从中获取原始数据的文件,但在原始数据工作簿的新工作表中。
  5. 循环此过程,直到所有原始数据文件都已通过工作簿运行并具有“输出”工作表。

标签: vbaexcel

解决方案


以下将循环遍历文件夹并将所有文件名添加到数组中(如果它们具有 .xlsm 扩展名),这可以针对您要查找的任何文件进行更改,然后您可以遍历数组以打开每个文件并执行您需要的任何操作:

Sub LoopThroughDirectory()
Dim Arr() As String
Dim objFSO As Object
Dim objFolder As Object
Dim objSubFolder As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

FolderPath = "C:\Users\YOU\Documents"

Set objFolder = objFSO.GetFolder(FolderPath)
i = 0
For Each objSubFolder In objFolder.Files
'Debug.Print objSubFolder.Name
    If Right(objSubFolder.Name, 4) = "xlsm" Then 'if file extension is = xlsm then add to array
        ReDim Preserve Arr(i + 1)
        Arr(i) = objSubFolder.Name
        i = i + 1
    End If
Next

For x = LBound(Arr) To UBound(Arr)
'Go through each file in your array
Next x

End Sub

推荐阅读