我需要创建一个宏,它循环遍历单个文件夹中的文件,并运行我在下面提供的代码。所有的文件都是以相同的方式构造的,但是有不同的数据。代码帮助我转到指定的目标文件,并计算列中"YES“的数目。然后将其输出到CountResults.xlsm (主工作簿)中。在Zac的帮助下,我有以下代码
Private Sub CommandButton1_Click()
Dim oWBWithColumn As Workbook: Set oWBWithColumn = Application.Workbooks.Open("C:\Users\khanr1\Desktop\CodeUpdateTest\Test01.xlsx")
Dim oWS As Worksheet: Set oWS = oWBWithColumn.Worksheets("Sheet2")
ThisWorkbook.Worksheets("Sheet1").Range("B2").Value = Application.WorksheetFunction.CountIf(oWS.Range("B:B"), "YES")
oWBWithColumn.Close False
Set oWS = Nothing
Set oWBWithColumn = Nothing
End Sub--这就是CountResults.xlsm (主工作簿)的样子:

,这是Test01.xlsx看起来的一个例子:

请注意,有10个测试文件(Test01、Test02.)但是代码应该能够更新添加的任何新的测试文件(例如。Test11,Test12.)。我有一个想法,将"Files“列合并到第一个图像中,以提取文件名并循环它们。
发布于 2016-10-14 21:34:04
最简单的方法是使用filesystemobject遍历文件夹中的所有文件,并找到文件名与预分解的掩码类似的文件(在您的例子中是"Test*.xslx")。请注意,它也通过指定文件夹中的子文件夹。如果不需要这样做,请省略每个循环的第一个:
Dim fso As Object 'FileSystemObject
Dim fldStart As Object 'Folder
Dim fld As Object 'Folder
Dim fl As Object 'File
Dim oWBWithColumn As Workbook
Dim oWbMaster as workbook
Dim oWsSource as worksheet
Dim oWsTarget as worksheet
Dim Mask As String
Dim k as long
k=2
Set oWbMaster = ActiveWorkbook
Set oWsTarget = oWbMaster.Sheets("Sheet1")
Set fso = CreateObject("scripting.FileSystemObject")
Set fldStart = fso.GetFolder("C:\Users\khanr1\Desktop\CodeUpdateTest\")
Mask = "Test*" & ".xlsx"
For Each fld In fldStart.Subfolders
For Each fl In fld.Files
If fl.Name Like Mask Then
Set oWBWithColumn = Application.Workbooks.Open(Filename:=fld.Path & "\" & fl.Name, ReadOnly:=True)
Set oWsSource = oWBWithColumn.Worksheets("Sheet2")
oWsTarget.Range("B"& k).Value = Application.WorksheetFunction.CountIf(oWsSource.Range("B:B"), "YES")
oWBWithColumn.Close SaveChanges:=False
k = k+1
End If
Next
Next如果这个答案有帮助,请标记为接受。还请注意,您的原始代码将替换主电子表格中B2单元格的值,这就是为什么我在每次迭代之后添加了k变量来更改目标单元格的原因。
附注:
您可以同时从文件夹中生成文件列表和yes计数,只需在关闭文件之前将这一行添加到代码中:
oWsTarget.Range("A"& k).Value= fl.Namehttps://stackoverflow.com/questions/40051989
复制相似问题