首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel :如何使用给定的代码循环在同一个文件夹中的工作簿?

Excel :如何使用给定的代码循环在同一个文件夹中的工作簿?
EN

Stack Overflow用户
提问于 2016-10-14 21:06:31
回答 2查看 884关注 0票数 2

(Previous Post)

我需要创建一个宏,它循环遍历单个文件夹中的文件,并运行我在下面提供的代码。所有的文件都是以相同的方式构造的,但是有不同的数据。代码帮助我转到指定的目标文件,并计算列中"YES“的数目。然后将其输出到CountResults.xlsm (主工作簿)中。在Zac的帮助下,我有以下代码

代码语言:javascript
运行
复制
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“列合并到第一个图像中,以提取文件名并循环它们。

EN

Stack Overflow用户

发布于 2016-10-14 21:34:04

最简单的方法是使用filesystemobject遍历文件夹中的所有文件,并找到文件名与预分解的掩码类似的文件(在您的例子中是"Test*.xslx")。请注意,它也通过指定文件夹中的子文件夹。如果不需要这样做,请省略每个循环的第一个:

代码语言:javascript
运行
复制
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计数,只需在关闭文件之前将这一行添加到代码中:

代码语言:javascript
运行
复制
oWsTarget.Range("A"& k).Value= fl.Name
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40051989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档