'======================================================================
'功能: 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
'函数名: getAllSubDirs
'参数1: ThisDirPath 需查找的文件夹名,最后可以有或没有"\"
'参数2: Files 是否只要文件夹名,可省略,默认为:FALSE
'参数3: FileFilter 过滤文件文件名,可适用于like支持形式
'返回值: 一个Variant型的数组
'=======================================================================
Function getAllSubDirs(ByVal ThisDirPath As String, _
Optional ByVal Files As Boolean = False, _
Optional ByVal FileFilter As String = "*.*") As Variant()
'======代码开始==============
Dim arr(), arrFileFullNames() 'arr为存储文件夹数组,arrFileFullNames存储文件数组
Dim DirName, thePath As String 'DirName为当前查询文件夹或文件,thePath为当前查询文件夹路径,ThisDirPath为指定查询的最上层文件夹路径
Dim i, j, k, m As Integer ThisDirPath = ThisDirPath & IIf(Right(ThisDirPath, ) = "\", "", "\") '把指定最上层文件夹路径处理成"\"结尾路径
i = : j = : k = : m =
ReDim Preserve arr(j)
arr(j) = ThisDirPath Do While j < UBound(arr) +
thePath = arr(j)
DirName = Dir(thePath, vbDirectory)
Do While DirName <> ""
If DirName <> "." And DirName <> ".." Then
If (GetAttr(thePath & DirName) And vbDirectory) = vbDirectory Then '如果是次级目录
i = i +
ReDim Preserve arr(i)
arr(i) = thePath & DirName & "\"
ElseIf thePath <> ThisDirPath And (DirName Like FileFilter) Then '如果非本工作簿所在文件夹文件,则文件全名存入数组
ReDim Preserve arrFileFullNames(k)
arrFileFullNames(k) = thePath & DirName
k = k +
End If End If
DirName = Dir
Loop
j = j +
Loop
'==========声明一个数组arrDirs接收arr数组除首个元素外数据(首个元素为指定文件夹本身)=====
If i > And Not Files Then 'i为0则没有下层文件夹
ReDim arrDirs( To UBound(arr) - )
For m = To UBound(arr)
arrDirs(m - ) = arr(m)
Next
Erase arr
Erase arrFileFullNames
getAllSubDirs = arrDirs
ElseIf k > And Files Then 'k为0则下层文件夹没有文件
Erase arrDirs
Erase arr
getAllSubDirs = arrFileFullNames
Else
arr() = ""
getAllSubDirs = arr()
End If
End Function '=======================================================================================================
'函数: getFileNameFromFullName 根据文件带全路径全名获得文件名
'参数1: strFullName 文件全名
'参数2: ifExName true 返回字符串含扩展名,默认是:False
'参数3: strSplitor 各级文件夹分隔符
'作用: 从带路径文件全名径获取返回: 文件名(true带扩展名)
'=======================================================================================================
Public Function getFileNameFromFullName(ByVal strFullName As String, _
Optional ByVal ifExName As Boolean = False, _
Optional ByVal strSplitor As String = "\") As String
'=======代码开始==============================================================================
Dim ParentPath As String
Dim FileName As String
ParentPath = Left$(strFullName, InStrRev(strFullName, strSplitor, , vbTextCompare)) '反向查找路径分隔符,获取文件父级目录
FileName = Replace(strFullName, ParentPath, "") '替换父级目录为空得到文件名
If ifExName = False Then
getFileNameFromFullName = Left(FileName, InStrRev(FileName, ".") - ) '返回不带扩展名文件名
Else
getFileNameFromFullName = FileName '返回带扩展名文件名
End If
End Function
'======================================================================================================= Function isEmptyArr(ByRef arr()) As Boolean '判断是否为空数组
Dim tempStr As String
tempStr = Join(arr, ",")
isEmptyArr = LenB(tempStr) <=
End Function

测试代码:

Sub test()
Dim arr()
Dim mypath As String
mypath = ThisWorkbook.Path
arr = getAllSubDirs(mypath, True, "*.xls")
If isEmptyArr(arr) Then
MsgBox "路径无效,退出程序!"
Exit Sub
End If
Range("a1").Resize(UBound(arr) + , ) = Application.Transpose(arr) End Sub

原文件下载

Excel VBA获取当文件下级子目录或目录中文件的更多相关文章

  1. linux复制指定目录下的全部文件到另一个目录中

    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...

  2. linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹

    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...

  3. EXcel vba 获取批注信息

    Public Function pizhu(i As Range) pizhu = i.Cells.Comment.Text End Function EXcel VBA获取批注信息

  4. 在Windows下通过命令行或者.bat文件统计一个目录中文件数量

    在Windows下面怎样通过命令行统计一个目录中文件的数量,或者说,如果在一个.bat文件中,统计一个目录中的文件数量? 我原来以为是不可能的,要编一个vbs程序什么的,后来到网上找了下,发现还真是可 ...

  5. PHP中统计目录中文件以及目录中目录的大小

    <?php  #循环遍历目录中所有的文件,并统计目录和文件的大小  $dirName="phpMyAdmin";  $dir=opendir($dirName);  #返回一 ...

  6. java统计指定目录中文件的个数和总的大小

    转: 统计指定目录中文件的个数和总的大小 package file; import java.io.File; import java.util.ArrayList; public class Fil ...

  7. C#统计目录中文件MD5值

    1. [代码]统计目录中文件MD5值 using System.IO;using System.Security.Cryptography;using System.Collections;using ...

  8. python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息

    运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...

  9. java、android 对比两个目录或文件是否是同一个目录或文件的方法

    由于软链接及android的外部卡mount方式存在,导致一个文件夹可能同时有两个路径,如: /mnt/sdcard1      /storage/ext_sdcard ,如果通过某种方式(如moun ...

随机推荐

  1. bzoj5099 [POI2018]Pionek 双指针

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5099 题解 这道题做法似乎挺单一的. (一开始想了个假做法 向量和的长度等于所有向量在其方向上 ...

  2. 046:ORM模型介绍

    ORM模型介绍: 随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: 1.SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长.会出现很多相近的SQL ...

  3. 前端面试题常考&必考之--清除浮动的方法

    浮动 问题:子元素设置了float后,脱离父元素,导致父元素无法撑开?(也就是子元素的高度没有过渡到父元素) 例子: 检查元素的效果: (三种)常用的解决办法: 1>额外标签法,添加一个空的di ...

  4. CSS背景和CSS3背景background属性

    css背景属性用于定义HTML元素的背景 背景属性既可以为单个的单元设置背景,也可以为整个页面设置背景,可以对上述二者的任意组合设置背景,段落.文字.不同状态的链接.图像.内容区域修改其背景样式.设置 ...

  5. HDU 6623 Minimal Power of Prime

    Time limit 1000 ms Memory limit 65536 kB OS Windows 中文题意 给一个数n,设将n质因数分解后可以得到 \[n=\prod_{i=1}^{\omega ...

  6. django FBV +CBV 视图处理方式总结

    1.FBV(function base views) 在视图里使用函数处理请求. url:        re_path('fbv', views.fbv),        # url(r'^fbv' ...

  7. 3D Computer Grapihcs Using OpenGL - 05 EBO

    本节将采用两种方法绘制两个三角形. 先看第一种方法的代码 MyGlWindow.cpp #include <gl\glew.h> #include "MyGlWindow.h&q ...

  8. SpringCloud 教程 (三)高可用的服务注册中心

    一.准备工作 Eureka can be made even more resilient and available by running multiple instances and asking ...

  9. kali的网络IP设置

    进入配置文件,配置IP leafpad /etc/network/interfaces.conf 写入如下格式的内容: /etc/network/interfaces # This file desc ...

  10. [BZOJ4558]:[JLoi2016]方(容斥+模拟)

    题目传送门 题目描述 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形上帝把我们派到了一个有N行M列的方格图上,图上一共有$(N+1)\times ...