Excel VBA获取当文件下级子目录或目录中文件
'======================================================================
'功能: 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
'函数名: 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获取当文件下级子目录或目录中文件的更多相关文章
- linux复制指定目录下的全部文件到另一个目录中
linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...
- linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...
- EXcel vba 获取批注信息
Public Function pizhu(i As Range) pizhu = i.Cells.Comment.Text End Function EXcel VBA获取批注信息
- 在Windows下通过命令行或者.bat文件统计一个目录中文件数量
在Windows下面怎样通过命令行统计一个目录中文件的数量,或者说,如果在一个.bat文件中,统计一个目录中的文件数量? 我原来以为是不可能的,要编一个vbs程序什么的,后来到网上找了下,发现还真是可 ...
- PHP中统计目录中文件以及目录中目录的大小
<?php #循环遍历目录中所有的文件,并统计目录和文件的大小 $dirName="phpMyAdmin"; $dir=opendir($dirName); #返回一 ...
- java统计指定目录中文件的个数和总的大小
转: 统计指定目录中文件的个数和总的大小 package file; import java.io.File; import java.util.ArrayList; public class Fil ...
- C#统计目录中文件MD5值
1. [代码]统计目录中文件MD5值 using System.IO;using System.Security.Cryptography;using System.Collections;using ...
- python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息
运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...
- java、android 对比两个目录或文件是否是同一个目录或文件的方法
由于软链接及android的外部卡mount方式存在,导致一个文件夹可能同时有两个路径,如: /mnt/sdcard1 /storage/ext_sdcard ,如果通过某种方式(如moun ...
随机推荐
- springboot easyexcel
pom..xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...
- Kali Linux的发展史,专为数字取证和渗透测试而设计
Kali Linux拥有非常强大的网络功能,Kali Linux是一个Debian衍生的Linux发行版,专为数字取证和渗透测试而设计.它是由OffensiveSecurityLtd维护和资助,是由M ...
- [REPRINT]Properties vs. Getters and Setters
http://www.python-course.eu/python3_properties.php Our new class means breaking the interface. The a ...
- 【leetcode】1106. Parsing A Boolean Expression
题目如下: Return the result of evaluating a given boolean expression, represented as a string. An expres ...
- 对npm的认识
npm由三个不同的组件组成:1,网站 2.命令行界面(CLI)3.注册表 需要在网站注册 命令行界面用来进行交互 注册表来进行保存 安装本地软件包 npm install 包名 更新本地软件包 npm ...
- Mybatis foreach批量插入
1.foreach的属性 item:集合中元素迭代时的别名,必填 index:在list和array中,index是元素的序号:在map中,index是元素的key,可选 open:foreach代码 ...
- 有了二叉查找树、平衡树(AVL)为啥还需要红黑树?
序言 二叉查找树的缺点 平衡二叉树 虽然平衡树解决了二叉查找树退化为近似链表的缺点,能够把查找时间控制在 O(logn),不过却不是最佳的,因为平衡树要求每个节点的左子树和右子树的高度差至多等于1,这 ...
- POJ 3111 K Best ( 二分 )
题意 : 给出 N 个物品的价值和重量,然后要求选出 K 个物品使得选出来物品的单位重量价值最大,最后输出被选物品的编号. 分析 : 很容易去想先算出每个物品的单位价值然后升序排序取前 K 个,但是 ...
- Linux 设置端口转发
ps -ef | grep 10020 --查询10020端口是否被使用kill -9 86971 --结束使用10020端口的进程 ssh -C -f -N -g -L 18889: ...
- (转)CBC模式和ECB模式解读
一 什么是CBC模式 CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起. 在CBC模式中,首先将明文分组与 ...