欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天和大家聊一聊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 <> ""
& i) = wb
i = i + 1
wb = Dir
Loop
For i = 1 To 2
wb = Application.GetOpenFilename()
(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 text
End Sub
首先,我们利用Dir函数来提取到文件下所有后缀为“xlsm”的工作簿名称,并将提取到的第一个工作簿的名称赋值给变量wb。
Do While wb <> ""
Range("A" & i) = wb
i = i + 1
wb = Dir
Loop
Do while语句循环,将每一个工作簿的名称输入到当前工作表的A列中。
注意这里的Dir函数,当第二次使用时,可以省略路径。
For i = 1 To 2
Application.GetOpenFilename() =
Workbooks.Open (wb)
Next
提取工作表名称时工作簿必须要处于打开状态,因此这里使用了GetOpenFilename和Open方法来打开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 & vbNewLine
Next
这是一个双层循环。第一层循环遍历所有打开的工作簿,第二次遍历工作簿中的工作表。变量text按照先工作簿名称,再工作表名称这样的顺序排列。
最后消息框输出,看看是什么样子的吧!
本期内容练习文件提取方式:
链接: https://pan.baidu.com/s/1HepXcQvJu1MV4ktDu7lQaQ?pwd=7ybc 提取码: 7ybc
好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”