vba - 通过单个工作簿运行文件夹中的所有文件
问题描述
如果我夸大了我的困境,我深表歉意。我想确保我很清楚。
我有一个包含我编写的宏的工作簿,用于分析和整合大量数据。工作簿本身有两个工作表:“数据输入”和“输出”。数据输入在第一行中有宏按钮,因此数据从单元格“A2”开始。输出是放置结束数据的位置,从单元格“A1”开始。
我想做的是建立在宏的基础上,用于在单个进程中处理多个原始数据文件。请记住,不会打开任何原始数据文件。只有一个运行这个宏。我想要工作簿本身:
- 从文件夹中的所有文件中提取工作表数据,一次一个。此文件夹中将有可变数量的文件。(为了澄清,放置在此文件夹中的每个原始数据文件都是一个工作表,数据从单元格“A1”开始,所述文件的名称会有所不同)
- 从文件中提取所述数据并将其导入单元格“A2”的“数据条目”
- 运行我的代码,处理数据并将其转储到工作表“输出”中。(值得注意的是“数据输入”为30列宽,行长可变,输出的列和行长可变)
- 获取工作表“输出”中的内容,将其返回到它从中获取原始数据的文件,但在原始数据工作簿的新工作表中。
- 循环此过程,直到所有原始数据文件都已通过工作簿运行并具有“输出”工作表。
解决方案
以下将循环遍历文件夹并将所有文件名添加到数组中(如果它们具有 .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
推荐阅读
- python - 为什么对 dict2 内的嵌套 dict 的更改会影响 dict1?
- linkedin - 公司页面 API 上的 Linkedin 共享根本不起作用。
- ios - 拖动时 UIScrollView 键盘关闭不会在 iOS 11 上使用自定义 inputView 键盘在 UIView 上调用 resignFirstResponder
- jquery - 将属性 headerClass 添加到 display:column
- firebase - 我可以将 UTM 参数传递给 Firebase Analytics 用户维度吗?
- spring-boot - 用新的替换旧的 Spring Boot Jar
- c# - 如何阻止 NCalc 写入控制台?
- c# - 如何计算多维数组c#(Unity)上的特定值
- android - 为什么不在 android mapsforge 地图中显示任何标记?
- css - 不同计算机上的不同滚动条类型