VBA学习(21):遍历文件夹(和子文件夹)中的文件

news2024/9/23 21:27:39

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

使用Dir函数

Dir函数是一个内置的VBA函数,可用于可使用VBA的任何应用程序。

使用File System Object(FSO)

File System Object(FSO)是一个单独的操作库,我们可以在VBA代码中使用它。有两种方法可以打开FSO库,即早期绑定或后期绑定。如果你不确定要使用哪个,建议使用后期绑定。它可能会导致代码速度变慢,但运行时的错误应该更少。

早期绑定

在VBE编辑器中,单击“工具——引用”。在“引用”对话框中,找到并选取“MicrosoftScripting Runtime”,单击“确定”按钮。

后期绑定

后期绑定不需要任何特定操作来启用FSO库,确保在VBA代码中需要时打开库。

遍历文件夹中所有文件

下面的示例代码将文件名打印到立即窗口,很容易修改这些代码以更适合你的具体情况。

方法1:使用Dir函数

Sub LoopAllFilesInAFolder()
   '遍历文件夹中的所有文件
    Dim fileName As Variant
    fileName =Dir("D:\excelperfect\")
    While fileName <> ""
        '插入对每个文件要执行的操作
        '本示例代码打印文件名到立即窗口
        Debug.Print fileName
        '设置fileName指向下一个文件
        fileName = Dir
    Wend
End Sub

上面的代码可以很容易地通过使用通配符进行调整。例如:
‘遍历带有扩展名”.xlsx”的每个文件
filename =Dir(“D:\excelperfect\*.xlsx”)
‘遍历文件名中包含单词”January”的每个文件
filename =Dir(“D:\excelperfect\*January*”)
‘遍历文件夹中的每个文本文件
filename =Dir(“D:\excelperfect\*.txt”) 

方法2:使用File System Object(FSO)后期绑定

Sub LoopAllFilesInFolder1()
    Dim folderName As String
    Dim FSOLibrary As Object
    Dim FSOFolder As Object
    Dim FSOFile As Object
   

   '将文件名赋值给变量
    folderName = "D:\excelperfect\"
   
   '设置对FSO库的所有引用
    Set FSOLibrary =CreateObject("Scripting.FileSystemObject")
    Set FSOFolder =FSOLibrary.GetFolder(folderName)
    Set FSOFile = FSOFolder.Files

   '使用For Each循环遍历文件夹中的每个文件
    For Each FSOFile In FSOFile
        '插入对每个文件要执行的操作
        ' 本示例代码打印文件名到立即窗口
        Debug.Print FSOFile.Name
    Next
   '释放内存
    Set FSOLibrary = Nothing
    Set FSOFolder = Nothing
    Set FSOFile = Nothing
End Sub

方法3:使用File System Object(FSO)早期绑定

要使用本方法,记得像本文开头那样开启对FSO库的引用。

Sub LoopFilesInFolder2()
    Dim folderName As String
    Dim FSOLibrary As FileSystemObject
    Dim FSOFolder As Object
    Dim FSOFile As Object
   '将文件名赋值给变量
    folderName = "D:\excelperfect\"

   '设置对FSO库的所有引用
    Set FSOLibrary = New FileSystemObject
    Set FSOFolder =FSOLibrary.GetFolder(folderName)
    Set FSOFile = FSOFolder.Files

   '使用For Each循环遍历文件夹中的每个文件
    For Each FSOFile In FSOFile
        '插入对每个文件要执行的操作
        ' 本示例代码打印文件名到立即窗口
        Debug.Print FSOFile.Name
    Next

   '释放内存
    Set FSOLibrary = Nothing
    Set FSOFolder = Nothing
    Set FSOFile = Nothing
End Sub

遍历子文件夹中所有文件

当文件存储在子文件夹中时,可能就需要一些技巧了。现在需要找到一种方法来钻取到这些子文件夹中。我们将使用上述相同的Dir和FSO方法。为了确保这些代码可以处理任意数量的子文件夹,宏实际上会调用自身(一种称为递归的技术)。

方法1:使用Dir函数

这个示例将把完整的文件路径(文件夹路径和文件名)打印到立即窗口。

Sub loopAllSubFolderSelectStartDirectory()
   '调用LoopAllSubFolders过程
    Call LoopAllSubFolders("D:\excelperfect\")
End Sub

Sub LoopAllSubFolders(ByVal folderPath As String)
    Dim fileName As String
    Dim fullFilePath As String
    Dim numFolders As Long
    Dim folders() As String
    Dim i As Long
    If Right(folderPath, 1) <>"\" Then folderPath = folderPath & "\"
    fileName = Dir(folderPath &"*.*", vbDirectory)
    While Len(fileName) <> 0
        If Left(fileName, 1) <>"." Then
            fullFilePath = folderPath &fileName
            If (GetAttr(fullFilePath) And vbDirectory) = vbDirectory Then
                ReDim Preserve folders(0 TonumFolders) As String
                folders(numFolders) =fullFilePath
                numFolders = numFolders + 1
            Else
                '插入对每个文件要执行的操作
               '本示例代码打印完整文件路径和文件名到立即窗口
                Debug.Print folderPath &fileName
            End If
        End If
        fileName = Dir()
    Wend
    For i = 0 To numFolders - 1
        LoopAllSubFolders folders(i)
    Next i
End Sub

方法2:使用File System Object(FSO)后期绑定

运行下面的过程:

Sub loopAllSubFolderSelectStartDirectory1()
    Dim FSOLibrary As Object
    Dim FSOFolder As Object
    Dim folderName As String
    '将文件夹名赋值给变量
     folderName = "D:\excelperfect\"
    '设置对FSO库的引用
     Set FSOLibrary = CreateObject("Scripting.FileSystemObject")
    '调用LoopAllSubFolders1过程
     LoopAllSubFolders1 FSOLibrary.GetFolder(folderName)
End Sub

SubLoopAllSubFolders1(FSOFolder As Object)
    Dim FSOSubFolder As Object
    Dim FSOFile As Object
   '遍历每个子文件夹
    For Each FSOSubFolder In FSOFolder.SubFolders
        LoopAllSubFolders1 FSOSubFolder
    Next
   '遍历每个文件并打印名字
    For Each FSOFile In FSOFolder.Files
        '插入对每个文件要执行的操作
        '本示例代码打印完整文件路径和文件名到立即窗口
        Debug.Print FSOFile.Path
    Next
End Sub

方法3:使用File System Object(FSO)早期绑定

要使用本方法,记得像本文开头那样开启对FSO库的引用。

Sub loopAllSubFolderSelectStartDirectory2()
    Dim FSOLibrary As FileSystemObject
    Dim FSOFolder As Object
    Dim folderName As String
    '将文件夹名赋值给变量
     folderName = "D:\excelperfect\"
    '设置对FSO库的引用
     Set FSOLibrary = New FileSystemObject
    '调用LoopAllSubFolders2过程
     LoopAllSubFolders2 FSOLibrary.GetFolder(folderName)
End Sub
Sub LoopAllSubFolders2(FSOFolder As Object)
    Dim FSOSubFolder As Object
    Dim FSOFile As Object
   '遍历每个子文件夹
    For Each FSOSubFolder In FSOFolder.SubFolders
        LoopAllSubFolders2 FSOSubFolder
    Next
   '遍历每个文件并打印名字
    For Each FSOFile In FSOFolder.Files
        '插入对每个文件要执行的操作
        '本示例代码打印完整文件路径和文件名到立即窗口
        Debug.Print FSOFile.Path
    Next
End Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

31.RAM-IP核的配置、调用、仿真全流程

&#xff08;1&#xff09;RAM IP核简介 RAM是随机存取存储器&#xff08;Random Access Memory&#xff09;的简称&#xff0c;是一个易失性存储器&#xff0c;其工作时可以随时对任何一个指定地址写入或读出数据。&#xff08;掉电数据丢失&#xff09; &#xff08;2&#…

Spring Cloud Gateway 入门与实战

一、网关 在微服务框架中&#xff0c;网关是一个提供统一访问地址的组件&#xff0c;它充当了客户端和内部微服务之间的中介。网关主要负责流量路由和转发&#xff0c;将外部请求引导到相应的微服务实例上&#xff0c;同时提供一些功能&#xff0c;如身份认证、授权、限流、监…

【企业级监控】Zabbix监控MySQL主从复制

Zabbix自定义监控项与触发器 文章目录 Zabbix自定义监控项与触发器资源列表基础环境前言四、监控MySQL主从复制4.1、部署mysql主从复制4.1.1、在两台主机&#xff08;102和103上安装&#xff09;4.1.2、主机102当master4.1.3、主机103当slave 4.2、MySQL-slave端开启自定义Key值…

JMeter案例分享:通过数据验证的错误,说说CSV数据文件设置中的线程共享模式

前言 用过JMeter参数化的小伙伴&#xff0c;想必对CSV Data Set Config非常熟悉。大家平时更关注变量名称&#xff0c;是否忽略首行等参数&#xff0c;其余的一般都使用默认值。然而我最近遇到一个未按照我的预想读取数据的案例&#xff0c;原因就出在最后一个参数“线程共享模…

摄像头 RN6752v1 视频采集卡

摄像头 AHD倒车摄像头比较好&#xff0c;AHD英文全名Analog High Definition&#xff0c;即模拟高清&#xff0c;拥有比较好的分辨率与画面质感。 RN6752v1 GQW AKKY2 usb 采集卡 FHD&#xff08;1080p&#xff09;、HD&#xff08;720p&#xff09;和D1&#xff08;480i&am…

开始Linux之路

人生得一知己足矣&#xff0c;斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

C# Winform的三态CheckBox,以及批量修改Panel中的控件

在C# WinForms中&#xff0c;如果你想批量修改一个Panel容器内的所有CheckBox控件的状态&#xff0c;你可以使用foreach循环来遍历Panel的Controls集合。下面是一个示例&#xff0c;展示了如何将一个Panel内所有的CheckBox控件设为选中状态&#xff08;Checked true&#xff0…

借助 Aspose.Words,在 C# 中将 Word 转换为 JPG

有时我们需要将 Word 文档转换为图片&#xff0c;因为 DOC 或 DOCX 文件在不同设备上的显示可能会有所不同&#xff0c;但图像&#xff08;例如 JPG 格式&#xff09;在任何地方看起来都一样。 Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作…

超声波眼镜清洗机哪个牌子好?2024年超全热门眼镜清洗机推荐

夏天来了&#xff0c;在户外活动不到几分钟就已经大汗淋漓&#xff01;特别是汗珠一滴滴的挂在眼皮上往下坠落简直让戴眼镜的人苦不堪言&#xff01;虽说戴眼镜在现如今来看是非常普遍的一件事情&#xff0c;但是人们一直深受眼镜清洗的困扰&#xff01;很多朋友看到这里可能会…

C++学习日记 | Lecture 9 类基础

资料来源&#xff1a;南科大 余仕琪 C/C Program Design LINK&#xff1a; CPP/week09 at main ShiqiYu/CPP GitHub9.1-classes-and-objects_哔哩哔哩_bilibili9.2-constructors-and-destructors_哔哩哔哩_bilibili9.3-this-pointer_哔哩哔哩_bilibili9.4-const-and-static…

好用的《身份证工具》插件,解锁6大实用功能

在数据处理领域&#xff0c;超级处理器插件凭借其强大的功能和高效的性能&#xff0c;一直是Excel和WPS用户的心头好。而今&#xff0c;这一优秀插件再次迎来革新——身份证工具功能现已支持单独安装使用&#xff0c;为用户带来前所未有的便利与灵活性。 超级处理器下载与安装…

matlab入门学习

一、什么是matlab MATLAB&#xff08;matrix laboratory矩阵实验室&#xff09;是一款商用数学软件&#xff0c;主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。可用于数据分析、深度学习、图像处理与计算机视觉、量化金融与风险管理等领域。 二、matlab和pyt…

快速在springboot项目中应用EasyExcel

目录 ​编辑一、介绍 二、准备工作 三、初始化项目 3.1 创建项目 3.2 引入依赖 3.3 创建数据库和数据表 3.4 编写application.properties文件 四、开始编写 4.1 目录结构 4.2 MyBatis配置类 4.3 用户实体类 4.4 mapper接口 4.5 编写数据操作文件 4.6 编写Service 业…

静态链接——编译和链接

一、编译和链接的过程 1、GCC生成可执行文件的总体过程 在日常的开发过程中&#xff0c;IDE总是会帮我们将编译和链接合并&#xff0c;一键式的执行,即使在liunx中&#xff0c;使用命令行来编译一个源文件也只是简单的一句"gcc hello.c"。我们并没有过多的关注编译和…

linux的学习(五):shell编程中的变量,运算符,条件判断

简介&#xff1a; shell编程的基本概念&#xff0c;定义变量&#xff0c;运算符&#xff0c;条件判断的基本使用 shell编程 把多个命令写到一个文件里&#xff0c;这个文件就是脚本&#xff0c;里面还有很多的流程控制 基本概念 脚本的后缀名是.sh 脚本的执行&#xff1a;…

全面理解Spring6框架到熟悉与掌握

个人笔记梳理&#xff0c;仅供参考 Spring是一款主流的JavaEE轻量级开源框架 Spring的狭义和广义 广义的Spring&#xff1a;Spring技术栈 泛指以Spring Framework为核心的Spring技术栈 经过十多年的发展&#xff0c;Spring已经不再是一个单纯的应用框架&#xff0c;而是逐…

EasyAnimate-v3版本支持I2V及超长视频生成

阿里云人工智能平台&#xff08;PAI&#xff09;自研开源的视频生成项目EasyAnimate正式发布v3版本&#xff1a; 支持 图片&#xff08;可配合文字&#xff09; 生成视频 支持 上传两张图片作为起止画面 生成视频 最大支持720p&#xff08;960*960分辨率&#xff09; 144帧视…

量化投资基础(一)之均值方差模型一

点赞、关注&#xff0c;养成良好习惯 Life is short, U need Python 量化投资基础系列&#xff0c;不断更新中 1. 投资组合收益率与风险 假设市场有 N N N 个资产&#xff0c;其随机收益率分别为 R 1 , R 2 , … , R N R_1,R_2,\dots,R_N R1​,R2​,…,RN​ &#xff0c;对应…

蓝桥 双周赛算法赛【小白场】

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 蓝桥第14场小白入门赛T1/T2/T3 题目&#xff1a; T1照常还是送分题无需多…

【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录 5.版本回退 5.1选项hard&后悔药 5.2后悔药&commit id 5.3版本回退的原理 6.撤销修改 6.1情况一 6.2情况二 6.3情况三 ​7.删除文件 Git重要能力之一马&#xff0c;版本回退功能。Git是版本控制系统&#xff0c;能够管理文件历史版本。本篇以ReadMe文件为…