如何用VBA遍历指定目录下的所有子文件夹Excel文件的所有工作表 200

 我来答
硅谷少年
2017-08-10 · TA获得超过7556个赞
知道大有可为答主
回答量:7116
采纳率:82%
帮助的人:1430万
展开全部

vba麻烦点,dir最快,excelhome论坛上有大量现成代码:


Sub Opiona() '//函数实例
FileArr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name, False)
For i = 0 To UBound(FileArr )
    MsgBox FileArr (i)
    'Set WB = Workbooks.Open(FileArr (I))  '//打开工作簿
    '你的代码
    'WB.Close true  '//保存
Next
End Sub
'*******************************************************************************************************
'功能:    查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
'函数名:  FileAllArr
'参数1:   Filename    需查找的文件夹名 不含最后的""
'参数2:   FileFilter     需要过滤的文件名,可省略,默认为:[*.*]
'参数3:   Liwai           剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name
'参数4:   Files           是否只要文件夹名,可省略,默认为:FALSE
'返回值:  一个字符型的数组
'使用方法:FileArr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name,false)
'作者:    北极狐工作室 QQ:14885553
'*******************************************************************************************************
Public Function FileAllArr(ByVal Filename As String, Optional ByVal FileFilter As String = "*.*", Optional ByVal Liwai As String = "", Optional ByVal Files As Boolean = False) As String()
    Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
    Set Did = CreateObject("Scripting.Dictionary")
    Dic.Add (Filename & ""), ""
    i = 0
    Do While i < Dic.Count
        Ke = Dic.keys   '开始遍历字典
        MyName = Dir(Ke(i), vbDirectory)    '查找目录
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                    Dic.Add (Ke(i) & MyName & ""), ""  '就往字典中添加这个次级目录名作为一个条目
                End If
            End If
            MyName = Dir    '继续遍历寻找
        Loop
        i = i + 1
    Loop
    Dim arrx() As String
    i = 0
    If Files = True Then   '//是否只输出文件夹名
       
        For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例
            ReDim Preserve arrx(i)
            If Ke <> Filename & "" Then  '//自身文件夹除外
                arrx(i) = Ke
                i = i + 1
            End If
         Next
         FileAllArr = arrx
    Else
        For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例
            MyFileName = Dir(Ke & FileFilter) '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx
            Do While MyFileName <> ""
               If MyFileName <> Liwai Then '排除例外文件
                  ReDim Preserve arrx(i)
                  arrx(i) = Ke & MyFileName
                  i = i + 1
               End If
                MyFileName = Dir
            Loop
        Next
        FileAllArr = arrx
    End If
End Function
'****************************************************************
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式