通过单个工作簿运行文件夹中的所有文件

时间:2018-04-27 14:27:28

标签: vba excel-vba excel

如果我夸大我的困境,请道歉。我想确保我的水晶般清澈。

我有一个带有我编写的宏的工作簿,用于分析和合并大量数据。工作簿本身有两个工作表:"数据输入"和"输出"。数据输入在第一行中有宏按钮,因此数据从Cell" A2"开始。输出是最终数据的放置位置,从Cell" A1"开始。

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

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

1 个答案:

答案 0 :(得分:0)

以下将遍历文件夹并将所有文件名添加到数组中,如果它们具有.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