暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VBA循环提取某文件夹中所有EXCEL文件

VBA语言専攻 2023-02-12
282
【分享成果,随喜正能量】向生活的纵深去,向生活的高远去,向生活的未来去,向生活的光明去,从来都是情怀深处的一种光芒和力量。春天归来,春风和暖,行走时光的温暖,把春天描绘在内心世界里。。
《VBA之Excel应用》(10178983)是非常经典的,是我推出的第七套教程,定位于初级,目前是第一版修订。这套教程从简单的录制宏开始讲解,一直到窗体的搭建,内容丰富,实例众多。大家可以非常容易的掌握相关的知识,这套教程共三册,十七章,都是我们在利用EXCEL工作过程中需要掌握的知识点,希望大家能掌握利用。今日讲解的内容是第三章内容:VBA循环提取某文件夹中所有EXCEL文件            
           

第五节 循环提取某目录下的所有文件  

大家好,在上一讲中,我们讲了如何提取已经打开工作薄的名称和工作簿所有工作表的名称,那么如何提取某个目录文件夹下面的所有文件并同时提取文件的所有工作表名称呢(这讲我们单就EXCEL文件进行提取)?在这讲中,我们将学习到Dir函数及Do While循环,并再次展示给大家对象的层次结构。

4  DO WHILE 循环讲解  

我们来详细看看在VBA中利用的第二种循环语句DO WHILE 循环:
1)语法:
Do { While | Until } condition 
    [ statements ] 
    [ Continue Do ] 
    [ statements ] 
    [ Exit Do ] 
    [ statements ] 
Loop 
或者
Do 
    [ statements ] 
    [ Continue Do ] 
    [ statements ] 
    [ Exit Do ] 
    [ statements ] 
Loop { While | Until } condition
         
2)参数说明:
Do        必需。 开始循环的定义 Do 。
While        必选项(除非使用了Until)。 重复循环,直到 condition 为False。
Until       必选项(除非使用了 While)。 重复循环,直到 condition 为True。
condition       可选。 Boolean 表达式。 如果 condition 为 Nothing ,则 Visual Basic 将其视为 False 。
statements       可选。 一个或多个重复的语句,或在之前重复 condition True 。
Continue Do       可选。 将控制转移到循环的下一次迭代 Do 。
Exit Do       可选。 将控制转移到 Do 循环外。
Loop       必需。 终止循环的定义 Do 。
         
使用说明:
3)Do...Loop  如果希望在满足条件之前重复执行一组语句,请使用此结构。如果要在判断条件之后将一组语句重复执行一定次数,则可以使用 While 或 Until 来指定 condition ,但不能同时使用两者。condition 只能在循环的开头或结尾测试一次。
         
4) Do...Loop 结构和do While 语句的区别在于condition 在循环的开头或结尾进行测试。
         
5Exit Do语句可以提供退出 Do…Loop的替代方法。Exit Do 将控制代码立即传输到Loop
语句后面的语句。
6Exit Do 通常在计算某些条件后(例如在结构中)使用 If...Then...Else。如果检测到可能导致不必要或无法继续迭代的条件(如错误值或终止请求),则可能需要退出循环。Exit Do的另一种用途是测试可能导致无限循环的情况,这是一个可运行很大甚至无限次数的循环。这时可以使用Exit Do 来转义循环。
         
7)可以在程序中的任意位置使用任意数量的 Exit Do 语句,在嵌套循环内使用时Exit Do 将控制转移出最内层循环,并将其转移到下一个更高的嵌套级别。

实现提取文件夹中文件的代码及代码运行效果  

有了上面的知识点讲解,我们来看下面的代码:
Sub mynzJ() '循环提取某目录下的所有文件
    Dim directory As String, myfileName As String, mysheet As Worksheet
    Application.ScreenUpdating = False '关闭屏幕更新
    directory = ThisWorkbook.Path & "\提取文件\"
    myfileName = Dir(directory & "*.xl??")  '使用Dir函数来查找存储在此目录中的第一个文件*.xl??,变量fileName现在保存在目录中找到的第一个Excel文件的名称
    Do While myfileName <> ""
        i = i + 1
        j = 2
        Cells(i, 1) = myfileName '提取文件名
        Workbooks.Open (directory & myfileName) '从关闭的Excel文件中提取数据(或工作表名称)没有简单的方法。因此,我们打开Excel文件
        For Each mysheet In Workbooks(myfileName).Worksheets '将Excel文件的所有工作表名称添加到第i行的其他列中。
            ThisWorkbook.Worksheets(7).Cells(i, j).Value = mysheet.Name
            j = j + 1
        Next
        Workbooks(myfileName).Close '关闭Excel文件。
        myfileName = Dir() 'Dir函数是一个特殊函数。要获取其他Excel文件,您可以再次使用Dir函数而不带参数。
    Loop
    Application.ScreenUpdating = True '再次启用屏幕更新
End Sub
         
代码截图:
         
代码的讲解:
1)这讲的代码和上一讲的代码思路类似,只是多了一个DIR函数的文件名提取。
         
2)为了提取到EXCEL文件我们利用了Dir(directory & "*.xl??")的格式,写法要注意,如果不需要值提取EXCEL文件,我们就可以直接用Dir(directory & "*.*")即可。
         
下面看一个代码的执行效果:
这样就完全提取出来了文件夹中的excel文件。
         
今日内容回向:
   1) Dir函数的意义是什么?
   2) 如何利用dir函数提取指定的类型文件?
   3)   do循环的格式是怎样的,意义是什么?
   4)  如何提取文件夹中的EXCEL文件的文件名及工作表名称并回填给工作表?
         
         
本讲内容参考程序文件:工作簿03.xlsm
   
 
我20多年的VBA成果全在下面的资料中:
      
         
         
【分享成果,随喜正能量】那些小小的积累,小小的改变,小小的推动,小小的呈现,叫步步前进、日日不止,不必追问,自有抵达,总会到达。

文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论