VBA实用案例-遍历

遍历是我们常用的一种方式,下面介绍5种场景的文件遍历,代码案例在文末,大家自行下载,自己按照各自需求修改:

【一、遍历当前文件夹下一层子文件夹】

Sub 按钮1_Click()

Application.ScreenUpdating = False

Set fso = CreateObject('scripting.filesystemobject')

Set ff = fso.getfolder(ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改

ActiveSheet.UsedRange.ClearContents

a = 1

For Each fd In ff.subfolders

Cells(a, 1) = fd.Name '子文件夹名,相对于当前文件夹的名字

Cells(a, 2) = fd '子文件夹全路径

a = a + 1

Next fd

Application.ScreenUpdating = True

End Sub

【二、遍历当前文件夹文件名】

Sub 按钮1_Click()

Application.ScreenUpdating = False

Set fso = CreateObject('scripting.filesystemobject')

Set ff = fso.getfolder(ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改

ActiveSheet.UsedRange.ClearContents

a = 1

For Each f In ff.Files

Rem 如果不需要提取本代码文件名,可以增加if语句 if f.name<> thisworkbook.name then.....

Rem 如果值需要提取某类文件,需要对f.name的扩展名进行判断

Rem 个人感觉split取 扩展名:split(f.name,'.')(ubound(split(f.name,'.'))),然后再判断,避免文件名还有其他“.”

Cells(a, 1) = f.Name '相对路径名

Cells(a, 2) = f '全路径名

a = a + 1

Next f

Application.ScreenUpdating = True

End Sub

【三、遍历当前文件夹所有子文件夹】

Sub 按钮1_Click()

Application.ScreenUpdating = False

ActiveSheet.UsedRange.ClearContents

Cells(1, 1) = '文件夹名'

Getfd (ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改

Application.ScreenUpdating = True

End Sub

Sub Getfd(ByVal pth)

Set Fso = CreateObject('scripting.filesystemobject')

Set ff = Fso.getfolder(pth)

Cells(Rows.Count, 1).End(3).Offset(1) = pth

For Each fd In ff.subfolders

Getfd (fd)

Next fd

End Sub

【四、遍历当前文件夹及所有子文件夹下的文件】

Sub 按钮1_Click()

Application.ScreenUpdating = False

ActiveSheet.UsedRange.ClearContents

Cells(1, 1) = '相对路径文件名'

Cells(1, 2) = '绝对路径文件名'

Getfd (ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改

Application.ScreenUpdating = True

End Sub

Sub Getfd(ByVal pth)

Set Fso = CreateObject('scripting.filesystemobject')

Set ff = Fso.getfolder(pth)

For Each f In ff.Files

Rem 具体提取哪类文件,还是需要根据文件扩展名进行处理

Cells(Rows.Count, 1).End(3).Offset(1) = f.Name

Cells(Rows.Count, 2).End(3).Offset(1) = f

Next f

For Each fd In ff.subfolders

Getfd (fd)

Next fd

End Sub

【五、汇总当前文件夹及子文件夹下所有excel文件内容】

Public d

Sub 按钮1_Click()

Application.ScreenUpdating = False

ActiveSheet.UsedRange.ClearContents

Cells(1, 1) = '编号'

Cells(1, 2) = '数量'

Set d = CreateObject('scripting.dictionary')

Getfd (ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改

Application.ScreenUpdating = True

If d.Count > 0 Then

ThisWorkbook.Sheets(1).[a2].Resize(d.Count) = WorksheetFunction.Transpose(d.keys)

ThisWorkbook.Sheets(1).[b2].Resize(d.Count) = WorksheetFunction.Transpose(d.items)

End If

End Sub

Sub Getfd(ByVal pth)

Set Fso = CreateObject('scripting.filesystemobject')

Set ff = Fso.getfolder(pth)

For Each f In ff.Files

Rem 具体提取哪类文件,还是需要根据文件扩展名进行处理

If InStr(Split(f.Name, '.')(UBound(Split(f.Name, '.'))), 'xl') > 0 Then

If f.Name <> ThisWorkbook.Name Then

Set wb = Workbooks.Open(f)

For Each sht In wb.Sheets

If WorksheetFunction.CountA(sht.UsedRange) > 1 Then

arr = sht.UsedRange

For j = 2 To UBound(arr)

d(arr(j, 1)) = d(arr(j, 1)) + arr(j, 2)

Next j

End If

Next sht

wb.Close False

End If

End If

Next f

For Each fd In ff.subfolders

Getfd (fd)

Next fd

End Sub

点个在看你最好看

(0)

相关推荐

  • Excel VBA工作薄 5.18 禁用宏功能就能阻止我的保护嘛?NO WAY!

    前景提要 在我们学习VBA保护数据工作薄的过程中,大家一定有不少的疑问,因为很多人都说,依靠工作薄的宏文件来保护数据是非常的不合理的,因为宏这个功能是能够被禁用的,确实是这样,现在很多的电脑都已经默认 ...

  • VBA代码库10:强制用户启用宏

    有时,必须确保用户在打开工作簿时启用宏,否则就不能实现工作簿的效果.由于无法使用宏去打开宏,因此需要一种确保用户启用宏的技术.下面讲解的方法隐藏除"欢迎"工作表(告诉用户启用宏)之 ...

  • VBA从工作表另存为工作簿

    Sub 宏1() Application.ScreenUpdating = False '屏幕更新关闭 Application.DisplayAlerts = False '显示和预警提示关闭 Dim ...

  • EXCEL强制启用宏的实现

    如果,EXCEL禁用了宏,那么,我们制作的很多功能就不能实现了.为此,必须要求启用宏. 首先,当然是在工作薄里添加一个名为"启用宏"的工作表,写上些内容,提示如何启用宏. 其次,在 ...

  • 删除 定义名称的 vba 总结

    '一.删除本工作簿内所有工作表的定义名称Sub 删除定义名称()Dim wb As Workbook, MyF$, MySApplication.ScreenUpdating = FalseAppli ...

  • VBA实用小程序72:遍历文件夹(和子文件夹)中的文件

    excelperfect 很多时候,我们都想要遍历文件夹中的每个文件,例如在工作表中列出所有文件名.对每个文件进行修改.VBA给我们提供了一些方式:(1)Dir函数:(2)File System Ob ...

  • 【实用案例】博途V15动态加密计时催款程序

    非标行业是一个特殊的行业,面对设备发货到现场后迟迟不肯付款的和找各种理由拒绝搪塞验收的客户,必须的采取非常的手段,其中给设备加密定时锁机是一种优选的方案.一来可以提醒客户要遵守规则要求,按时验收,按时 ...

  • VBA实用小程序77:生成字符的所有组合

    excelperfect 这是在stackoverflow.com中看到的一段VBA程序,生成所有7个字符中5个字符的任意组合,有兴趣的朋友可以试试. 程序代码如下: Public Function ...

  • VBA实用小程序78:统计工作簿内文本框和批注中的字符及单词数

    excelperfect 下面的程序可以统计工作簿所有工作表中文本框和批注内的字符和单词的数量. Sub CountCharWorBOXCMT() Dim wks As Worksheet Dim l ...

  • PLC编程基本功:梯形图与控制线路(附1164个三菱PLC实用案例)

    专注自动化培训14年 技成培训网 技成培训 技成培训网是一家致力于制造业远程教育品牌.专注14年,专业课程涵盖了电工基础.PLC.变频器.伺服.人机界面.机械制图.数控.机器人等精品课程,利用全新线上 ...

  • VBA实用小程序73:厘米、英寸和像素、磅的转换

    excelperfect Excel.PowerPoint和Word使用了一种称为磅的测量方法.但是,标准应用程序菜单中的测量单位是厘米或英寸. 可以在Excel选项更改默认的测量单位.单击" ...

  • VBA实用小程序75:选择所有的合并单元格

    excelperfect 在使用VBA操作单元格时,合并的单元格可能会导致问题,甚至在工作表中进行一些操作时,合并的单元格也可能会导致错误.因此,如果我们能够识别合并的单元格,就可以确定对它们采取的操 ...

  • VBA实用小程序74:将合并单元格转换为跨列居中

    excelperfect "合并后居中"按钮是Excel界面中一个非常方便的功能,很多人都喜欢使用合并单元格.然而,对合并单元格进行一些操作会带来一些问题,Excel会给出下图1所 ...

  • VBA实用小程序71:统计工作簿中的字符数

    excelperfect 引言:这是在ozgrid.com论坛中看到的一个VBA程序,特辑录于此,供有兴趣的朋友学习参考. 下面的程序统计工作簿中所有工作表的字符总数,包括其中的文本框中的字符数. S ...