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 ...
随机推荐
- Django框架架构总览
Django框架架构总览 理解Django是如何运作的 条目创建于 2013-08-14 1464 views 服务器君一共花费 15.204 ms 进行了 4 次数据库查询,努力地为 ...
- MAN RPM
RPM(8) Red Hat Linux RPM(8) NAME/名称 rpm - RPM Package Manager/RPM-RPM包管理器SYNOPSIS/简介 QUER ...
- day02记
一.Tomcat搭建 1.service和controller分别搭建独立的Tomcat且port不一致 2.部署项目选择带有exploded的 3.运行时应先启动service再启动controll ...
- 【NOIP2013模拟】DY引擎
题目 BOSS送给小唐一辆车.小唐开着这辆车从PKU出发去ZJU上课了. 众所周知,天朝公路的收费站超多的.经过观察地图,小唐发现从PKU出发到ZJU的所有路径只会有N(2<=N<=300 ...
- NOIP模拟赛(by hzwer) T3 小奇回地球
[题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...
- A1036
输入n行不同学生的name性别id和成绩,输出成绩最高的女生名字和id,成绩最低的男生名字和id求出二者的差 如果有性别缺少,输出Absent并在结果行输出NA 注意变量不要搞混,可以用结构体……不过 ...
- 多线程之同时更改数据问题--启用lock
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 封装通用的 ajax, 基于 jQuery。
在前端异步获取数据时候每次都是使用 ajax:为了通用性更好,然而封装通用的 ajax 是一个一劳永逸的办法. 本次基于 jQuery 封装实现: 第一步: 引入 jQuery: <script ...
- Java数据结构与算法(1):线性表
线性表是一种简单的数据类型,它是具有相同类型的n个数据元素组成的有限序列.形如如A0,A1,...,An-1.大小为0的表为空表,称Ai后继Ai-1,并称Ai-1前驱Ai. printList打印出表 ...
- ORACLE 临时表空间管理
临时表空间和临时段 临时表空间用于存放排序.临时表等数据,其信息不需要REDO,因此临时表的DML操作往往比普通表产生的REDO少很多.临时表数据变化不产生REDO,UNDO数据变化产生REDO.临 ...