学不会这个VBA小函数,你就甭想遍历文件夹下全部内容!

文摘   2024-10-28 20:00   上海  




欢迎转发和点一下“看”,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路





小伙伴们好,今天和大家聊一聊VBA的那些事儿。在一个文件夹中有多个工作簿文件,每个工作簿中又有多个工作表。现在如何将文件夹中的工作簿名称提取出来,同时将每个工作簿中工作表的名称也提取出来,放在工作簿名称下方,以消息框的形式输出。

这是一道简单的VBA题目,用到了循环语句、DIR函数以及消息框。提取文件夹下文件的名称是一个常见的工作任务,使用函数公式和VBA代码都可以很好地完成。相关的内容以前的推文想知道如何快速提取文件夹中所有文件名吗?也介绍过。





01

VBA循环遍历工作簿,Dir函数非常重要




完整代码如下:

Sub 遍历工作簿和工作表()    Dim wb As String, i As Integer, mywb As Workbook, mysht As Worksheet, text As String    wb = Dir("D:\Excel应用之家\VBA\代码\工作簿\*.xlsm")    i = 1    Do While wb <> ""        Range("A" & i) = wb        i = i + 1        wb = Dir    Loop    For i = 1 To 2        wb = Application.GetOpenFilename()        Workbooks.Open (wb)    Next    For Each mywb In Workbooks        text = text & "Workbook:" & mywb.Name & vbNewLine & "Worksheet:" & vbNewLine        For Each mysht In mywb.Worksheets            text = text & mysht.Name & vbNewLine        Next        text = text & vbNewLine    Next    MsgBox textEnd Sub

首先,我们利用Dir函数来提取到文件下所有后缀为“xlsm”的工作簿名称,并将提取到的第一个工作簿的名称赋值给变量wb

Do While wb <> ""    Range("A" & i) = wb    i = i + 1    wb = DirLoop

Do while语句循环,将每一个工作簿的名称输入到当前工作表的A列中。

注意这里的Dir函数,当第二次使用时,可以省略路径。

For i = 1 To 2    wb = Application.GetOpenFilename()    Workbooks.Open (wb)Next

提取工作表名称时工作簿必须要处于打开状态,因此这里使用了GetOpenFilenameOpen方法来打开2个任意工作簿。

For Each mywb In Workbooks    text = text & "Workbook:" & mywb.Name & vbNewLine & "Worksheet:" & vbNewLine    For Each mysht In mywb.Worksheets        text = text & mysht.Name & vbNewLine    Next    text = text & vbNewLineNext

这是一个双层循环。第一层循环遍历所有打开的工作簿,第二次遍历工作簿中的工作表。变量text按照先工作簿名称,再工作表名称这样的顺序排列。

最后消息框输出,看看是什么样子的吧!





本期内容练习文件提取方式:

链接: https://pan.baidu.com/s/1HepXcQvJu1MV4ktDu7lQaQ?pwd=7ybc 提取码: 7ybc 


好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!


-END-


长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助


我就知道你“在看”


推荐阅读

Excel应用之家
介绍、交流EXCEL各项功能在工作中的实际应用; 为你答疑解惑;分享各类图表、表格和模板;提供有偿代工服务。
 最新文章