VB中遍历目录,遍历目录中查找文件
【VBA】遍历文件夹(含子文件夹)方法
![【VBA】遍历文件夹(含子文件夹)方法](https://img.taocdn.com/s3/m/5cd5611842323968011ca300a6c30c225901f01c.png)
【VBA】遍历文件夹(含子文件夹)方法一、调用目标文件夹的方法1、Application.FileDialog方法Sub ListFilesT est()With Application.FileDialog(msoFileDialogFolderPicker) '运行后出现标准的选择文件夹对话框If .Show Then myPath = .SelectedItems(1) Else Exit Sub '如选中则返回=-1 / 取消未选则返回=0End WithIf Right(myPath, 1) <> '' Then myPath = myPath & '''返回的是选中目标文件夹的绝对路径,但除了本地C盘、D盘会以'C:'形式返回外,其余路径无''需要自己添加End Sub2、视窗浏览器界面选择目标文件夹Sub ListFilesT est()Set myFolder = CreateObject('Shell.Application').BrowseForFolder(0, 'GetFolder', 0)If Not myFolder Is Nothing Then myPath$ = myFolder.Items.Item.Path Else MsgBox 'Folder not Selected': Exit SubIf Right(myPath, 1) <> '' Then myPath = myPath & '''同样返回的是选中目标文件夹的绝对路径,但除了本地C盘、D盘会以'C:'形式返回外,其余路径无''需要添加End Sub二、仅列出所有文件不包括子文件夹、不包括子文件夹中的文件Sub ListFilesTest()With Application.FileDialog(msoFileDialogFolderPicker)If .Show ThenRight(myPath, 1) <> '' Then myPath = myPath & '''以上选择目标文件夹以得到路径myPath MsgBox ListFiles(myPath) '调用FSO的ListFiles过程返回目标文件夹下的所有文件名End SubFunction ListFiles(myPath$)Set fso = CreateObject('Scripting.FileSystemObject') '打开FSO脚本、建立FSO对象实例 For Each f In fso.GetFolder(myPath).Files '用FSO方法遍历指定文件夹内所有文件 i = i + 1: s = s & vbCr & '逐个列出文件名并统计文件个数 i Next ListFiles = i & ' Files:' & s '返回所有文件名的合并字符串End Function三、仅列出目标文件夹中所有子文件夹名不包括目标文件夹中文件、不包括子文件夹中的文件或子文件夹Sub ListFilesTest()With Application.FileDialog(msoFileDialogFolderPicker)If .Show Then myPath$ = .SelectedItems(1) Else Exit SubEnd WithIf Right(myPath, 1) <> '' Then myPath = myPath & '' MsgBox ListFolders(myPath)End SubFunction ListFolders(myPath$)Set fso = CreateObject('Scripting.FileSystemObject')For Each f In fso.GetFolder(myPath).SubFolders j = j + 1: t = t & vbCr & Next ListFolders = j & ' Folders:' & tEnd Functionfso.GetFolder(myPath).Filesfso.GetFolder(myPath).SubFolders四、遍历目标文件夹内所有文件、以及所有子文件夹中的所有文件【字典】Sub ListFilesTest() With Application.FileDialog(msoFileDialogFolderPicker) If .Show ThenRight(myPath, 1) <> '' Then myPath = myPath & ''MsgBox 'List Files:' & vbCr & Join(ListAllFsoDic(myPath), vbCr) MsgBox 'List SubFolders:' & vbCr & Join(ListAllFsoDic(myPath, 1), vbCr)End SubFunction ListAllFsoDic(myPath$, Optional k = 0) '使用2个字典但无需递归的遍历过程Dim i&, j& Set d1 = CreateObject('Scripting.Dictionary') '字典d1记录子文件夹的绝对路径名 Set d2 = CreateObject('Scripting.Dictionary') '字典d2记录文件名(文件夹和文件分开处理)d1(myPath) = '' '以当前路径myPath作为起始记录,以便开始循环检查Set fso = CreateObject('Scripting.FileSystemObject') Do While i < d1.Count '当字典1文件夹中有未遍历处理的key存在时进行Do循环直到 i=d1.Count即所有子文件夹都已处理时停止kr = d1.Keys '取出文件夹中所有的key即所有子文件夹路径(注意每次都要更新) For Each f In fso.GetFolder(kr(i)).Files '遍历该子文件夹中所有文件(注意仅从新的kr(i) 开始)j = j + 1: d2(j) = '把该子文件夹内的所有文件名作为字典Item项加入字典d2 (为防止文件重名不能用key属性) Nexti = i + 1 '已经处理过的子文件夹数目 i +1 (避免下次产生重复处理) For Each fd In fso.GetFolder(kr(i - 1)).SubFolders '遍历该文件夹中所有新的子文件夹 d1(fd.Path) = ' ' & & '' '把新的子文件夹路径存入字典d1以便在下一轮循环中处理 Next Loop If k Then ListAllFsoDic = d1.Keys Else ListAllFsoDic = d2.Items '如果参数=1则列出字典d1中所有子文件夹的路径名(如使用d1.Items则仅列出子文件夹名称不含路径) '如果参数=0则默认列出字典d2中Items即所有文件名 End Function【DIR】Sub ListAllDirDicTest() WithApplication.FileDialog(msoFileDialogFolderPicker) If .Show Then myPath$ = .SelectedItems(1) Else Exit Sub End With If Right(myPath, 1) <> '' Then myPath = myPath & ''MsgBox Join(ListAllDirDic(myPath), vbCr) 'GetAllSubFolder's File 列出目标文件夹内含子文件夹内所有文件MsgBox Join(ListAllDirDic(myPath, 1), vbCr) 'GetThisFolder's File 列出目标文件夹内所有文件(不含子文件夹)MsgBox Join(ListAllDirDic(myPath, -1), vbCr) 'GetThisFolder's SubFolder 仅列出目标文件夹内的子文件夹MsgBox Join(ListAllDirDic(myPath, -2), vbCr) 'GetAllSubFolder 列出目标文件夹内含子文件夹的所有子文件夹MsgBox Join(ListAllDirDic(myPath, 1, 'tst'), vbCr) 'GetThisFolder's SpecialFile 仅列出文件夹内含关键字文件 MsgBox Join(ListAllDirDic(myPath, , 'tst'), vbCr) 'GetAllSubFolder's SpecialFile 列出子文件夹内含关键字文件End SubFunction ListAllDirDic(myPath$, Optional sb& = 0, Optional SpFile$ = '') '利用Dir方法、以及用2个字典分别记录子文件夹路径和文件名的文件搜寻方法。
VB遍历文件目录的实现方法总结
![VB遍历文件目录的实现方法总结](https://img.taocdn.com/s3/m/856c681ffad6195f312ba698.png)
VB遍历文件目录的实现方法总结2009-04-25 20:44VB遍历文件夹的实现方法总结一共三种,如下:1 使用FSO对象模型'===================================================================== ========'描述:需要Scripting类型库(Scrrun.dll)支持。
实际使用时需要引用Microsoft Scripting Runtime'优点:测试当中没有错误。
可以检测隐藏文件。
'示例:一个文本标签、一个ListBox、一个命令按钮。
都取默认名称即可'===================================================================== ========Dim fso As New FileSystemObjectDim fld As FolderPrivate Sub Command1_Click()Dim nDirs As Long, nFiles As Long, lSize As CurrencyDim sDir As String, sSrchString As StringsDir = InputBox("Type the directory that you want to search for", _"FileSystemObjects example", "C:\")sSrchString = InputBox("Type the file name that you want to search for", _"FileSystemObjects example", "vb.ini")MousePointer = vbHourglassLabel1.Caption = "Searching " & vbCrLf & UCase(sDir) & "..."lSize = FindFile(sDir, sSrchString, nDirs, nFiles)MousePointer = vbDefaultMsgBox Str(nFiles) & " files found in" & Str(nDirs) & _" directories", vbInformationMsgBox "Total Size = " & lSize & " bytes"End SubPrivate Function FindFile(ByVal sFol As String, sFile As String, _nDirs As Long, nFiles As Long) As CurrencyDim tFld As Folder, tFil As File, FileName As StringOn Error GoTo CatchSet fld = fso.GetFolder(sFol)FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _vbHidden Or vbSystem Or vbReadOnly)While Len(FileName) <> 0FindFile = FindFile + FileLen(fso.BuildPath(fld.Path, _FileName))nFiles = nFiles + 1List1.AddItem fso.BuildPath(fld.Path, FileName) ' Load ListBoxFileName = Dir() ' Get next fileDoEventsWendLabel1 = "Searching " & vbCrLf & fld.Path & "..."nDirs = nDirs + 1If fld.SubFolders.Count > 0 ThenFor Each tFld In fld.SubFoldersDoEventsFindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles)NextEnd IfExit FunctionCatch: FileName = ""Resume NextEnd Function2 Api方法'===================================================================== ==========='描述:使用Api。
VBA 遍历文件、文件夹
![VBA 遍历文件、文件夹](https://img.taocdn.com/s3/m/ccc6c6dd240c844769eaeeb7.png)
ReDim Preserve astrFolderPath(UBound(astrFolderPath()) + 1)
Next Sfld
ReDim Preserve astrFolderPath(UBound(astrFolderPath()) - 1)
Dim astrFolderPath() As String
ReDim astrFolderPath(1)
'遍历主目录下的所有子文件夹路径,存储到动态数组中
Dim Sfld As Folder
For Each Sfld In SubFlds
ReDim astrFilePath(1)
'遍历主目录下的所有文件路径,存储到动态数组中
Dim fl As File
For Each fl In fls
astrFilePath(UBound(astrFilePath())) = fl.Path
' 功能:遍历strFolderPath目录下的所有【文件】.返回数组.存储文件路径.
' 参数:strFolderPath,字符串,目录绝对路径.
' Update:2015-1-21
' Author:siyuqxxx
'--------------- GetFilesPath(strFolderPath) -----------------
' Author:siyuqxxx
'--------------- GetFoldersPath(strFolderPath) -----------------
VB查找文件的两种方法
![VB查找文件的两种方法](https://img.taocdn.com/s3/m/3263a0ca6429647d27284b73f242336c1eb930f9.png)
VB查找文件的两种方法
1、使用目录树查找文件:可以使用Visual Basic的文件查找工具,
它包含一个可以把文件系统结构显示成一个目录树的工具窗口,可以用来
浏览文件系统中的所有文件和文件夹。
可以在“开始”菜单中找到“文件
查找”,或者在Visual Basic的工具栏中点击“文件资源管理器”的图标。
在“文件资源管理器”窗口中,可以用鼠标单击当前的目录,查看下
一级目录,在这个过程中可以找到需要的文件,单击左键确定文件或文件
夹的位置。
2、使用工具查找文件:在Visual Basic中也可以使用工具查找文件,可以从“开始”菜单中找到“文件查找”,点击打开窗口,在窗口中输入
要的文件名称,指定要的范围,点击“查找”按钮,程序会在指定的范围
内满足要求的文件,找到的结果会显示在右边的窗口中,单击右键可以查
看文件的详细信息,也可以查看文件的位置,从而找到指定文件的位置。
VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject)
![VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject)](https://img.taocdn.com/s3/m/627362ef998fcc22bcd10d53.png)
VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject)在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。
兰色对代码进行了注解,希望对大家有所帮助第一种方法:使用filesearch对象Sub mysearch()Dim fs, i, arr(1 To 10000)Set fs = Application.FileSearch '设置一个搜索对象With fs.LookIn = ThisWorkbook.Path & "/" '设置搜索路径.Filename = "*.xls" '要搜索文件名和类型.SearchSubFolders = True '是否需要搜索子文件夹If .Execute > 0 Then '如果找不到文件MsgBox "There were " & .FoundFiles.Count & _" file(s) found." '显示文件找不到For i = 1 To .FoundFiles.Count '通过循环把所有搜索到的文件存入到数组中arr(i) = .FoundFiles(i)Next iSheets(1).Range("A1").Resize(.FoundFiles.Count) = Application.Transpose(arr) ' '把数组内的路径和文件名放在单元格中ElseMsgBox "There were no files found."End IfEnd WithEnd Sub第二种方法:引用FileSystemObject对象注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中代码及注释:Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称Dim cntFiles% '文件个数Public Sub ListAllFiles()Dim strPath$ '声明文件路径Dim i%'Set fso = CreateObject("Scripting.FileSystemObject")Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象strPath = ThisWorkbook.Path & "/" '"设置要遍历的文件夹目录cntFiles = 0Set fd = fso.GetFolder(strPath) '设置fd文件夹对象SearchFiles fd '调用子程序查搜索文件Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中End SubSub SearchFiles(ByVal fd As Folder)Dim fl As FileDim sfd As FolderFor Each fl In fd.Files '通过循环把文件逐个放在数组内cntFiles = cntFiles + 1ArrFiles(cntFiles) = fl.PathNext flIf fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合For Each sfd In fd.SubFolders '在Folders 集合进行循环查找SearchFiles sfd '使用递归方法查找下一个文件夹NextEnd Sub。
VB代码遍历某文件夹及子文件夹中的所有文件
![VB代码遍历某文件夹及子文件夹中的所有文件](https://img.taocdn.com/s3/m/b53689124431b90d6c85c72a.png)
End Sub
'遍历某文件夹下的文件
Private Sub Showfilelist(folderspec)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
'Fn.Size '得到文件大小
'Fn.Path '得到文件路径
'Fn.Type '得到文件类型
'Fn.DateLastModified '得到文件最后的修改日期
'调用方法
'ShowFolderList ("c:\a") 查找目录
Myname = Dir(MyPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)
Do While Myname <> ""
If Myname <> "." And Myname <> ".." Then
If (GetAttr(MyPath & Myname) And vbDirectory) = vbDirectory Then '如果找到的是目录
'遍历文件夹
Private Sub ShowFolderList(folderspec)
Dim fs, f, f1, s, sf
Dim hs, h, h1, hf
Set fs = CreateObject("Scripting.FileSystemObject")
vb遍历文件夹(含子文件夹)
![vb遍历文件夹(含子文件夹)](https://img.taocdn.com/s3/m/926656c458f5f61fb7366695.png)
Dim Myname As String
Dim a As String
Dim B() As String
Dim dir_i() As String
Dim i, idir As Long
If Right(MyPath, 1) <> "\" Then MyPath = MyPath + "\"ir - 1
Call sosuofile(MyPath + dir_i(i))
Next i
ReDim dir_i(0) As String
End Sub
附:
'在这里可以处理目录中的文件
' '得到文件名
Next
End Sub
程序代码
'遍历某文件夹下的文件
Private Sub Showfilelist(folderspec)
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
程序代码
'遍历文件夹
Private Sub ShowFolderList(folderspec)
Dim fs, f, f1, s, sf
Dim hs, h, h1, hf
Set fs = CreateObject("Scripting.FileSystemObject")
vb遍历文件夹(含子文件夹)
这段时间写软件需要遍历文件夹及文件,以前读写文件都是用BASIC的老的I/O方法操作,仔细阅读了FSO的操作并在网上整理下资料,得到了遍历文件夹及文件的代码,模块如下:
vb 搜索示例
![vb 搜索示例](https://img.taocdn.com/s3/m/9d6b9e340b4c2e3f57276373.png)
VB中遍历目录,遍历目录中查找文件(api和dir())2007年05月05日星期六 14:59VB 中遍历目录,遍历目录查找文件的2个实现方法方法1:API实现将下列代码保存到一个模块中,就可以直接调用了--------------------------------------------------------------------------------Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData AsWIN32_FIND_DATA) As LongPublic Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData AsWIN32_FIND_DATA) As LongPublic Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long'最大路径长度和文件属性常量的定义Public Const MAX_PATH = 260Public Const FILE_ATTRIBUTE_ARCHIVE = &H20Public Const FILE_ATTRIBUTE_COMPRESSED = &H800Public Const FILE_ATTRIBUTE_DIRECTORY = &H10Public Const FILE_ATTRIBUTE_HIDDEN = &H2Public Const FILE_ATTRIBUTE_NORMAL = &H80Public Const FILE_ATTRIBUTE_READONLY = &H1Public Const FILE_ATTRIBUTE_SYSTEM = &H4Public Const FILE_ATTRIBUTE_TEMPORARY = &H100'自定义数据类型FILETIME和WIN32_FIND_DATA的定义Public Type FILETIMEdwLowDateTime As LongdwHighDateTime As LongEnd TypePublic Type WIN32_FIND_DATAdwFileAttributes As LongftCreationTime As FILETIMEftLastAccessTime As FILETIMEftLastWriteTime As FILETIMEnFileSizeHigh As LongnFileSizeLow As LongdwReserved0 As LongdwReserved1 As LongcFileName As String * MAX_PATHcAlternate As String * 14End TypePublic Function fDelInvaildChr(str As String) As StringOn Error Resume NextFor i = Len(str) To 1 Step -1If Asc(Mid(str, i, 1)) <> 0 And Asc(Mid(str, i, 1)) <> 32 Then fDelInvaildChr = Left(str, i)Exit ForEnd IfNextEnd Function'遍历主函数'参数说明:' strPathName 要遍历的目录' objList 使用VB的内部控件ListBox来存放遍历得到的路径,之所以' 不使用字符串数组是因为数组大小不好定义''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Public Sub sDirTraversal(ByVal strPathName As String, ByRef objList As ListBox)Dim sSubDir(200) As String '存放当前目录下的子目录,下标可根据需要调整Dim iIndex As Integer '子目录数组下标Dim i As Integer '用于循环子目录的查找Dim lHandle As Long 'FindFirstFileA 的句柄Dim tFindData As WIN32_FIND_DATA 'Dim strFileName As String '文件名On Error Resume Next'初始化变量i = 1iIndex = 0tFindData.cFileName = "" '初始化定长字符串lHandle = FindFirstFile(strPathName & "\*.*", tFindData)If lHandle = 0 Then '查询结束或发生错误Exit SubEnd IfstrFileName = fDelInvaildChr(tFindData.cFileName)If tFindData.dwFileAttributes = &H10 Then '目录If strFileName <> "." And strFileName <> ".." TheniIndex = iIndex + 1sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组End IfElseobjList.AddItem strPathName & "\" & strFileNameEnd If'循环查找下一个文件,直到结束Do While TruetFindData.cFileName = ""If FindNextFile(lHandle, tFindData) = 0 Then '查询结束或发生错误 FindClose (lHandle)Exit DoElsestrFileName = fDelInvaildChr(tFindData.cFileName)If tFindData.dwFileAttributes = &H10 ThenIf strFileName <> "." And strFileName <> ".." TheniIndex = iIndex + 1sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组End IfElseobjList.AddItem strPathName & "\" & strFileNameEnd IfEnd IfLoop'如果该目录下有目录,则根据目录数组递归遍历If iIndex > 0 ThenFor i = 1 To iIndexsDirTraversal sSubDir(i), objListNextEnd IfEnd Sub--------------------------------------------------------------------------------方法2:不使用API,直接用VB的函数Dir 来实现'------------------------------------'遍历列出所有目录Public Function FindTxt(ByVal sTmp As String, list As Collection)Dim myPath, myName As StringDim i, j, k As IntegerDim sPath() As StringDim sStr() As StringDim sTemp As String'Dim sTxt() As StringmyPath = sTmpmyName = Dir(myPath, vbDirectory) ' 找寻第一项。
基于VB的遍历文件夹中所有文件的三种方法比较
![基于VB的遍历文件夹中所有文件的三种方法比较](https://img.taocdn.com/s3/m/56f046c80242a8956aece40a.png)
基于VB的遍历文件夹中所有文件的三种方法比较作者:丁志云来源:《电脑知识与技术》2018年第29期摘要:该文主要研究在VB中如何遍历指定文件夹中所有文件的方法,一共列举出三种不同的方法,并比较它们的优缺点,为应用程序中访问文件提供支持。
关键词:遍历文件;API;VB;FSO中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)29-0100-02Abstract: This paper mainly studies how to traverse all the files in the specified folder in VB,lists three different methods, and compares their advantages and disadvantages to provide support for accessing files in applications.Key words: Ergodic file;API;VB;FSO随着信息技术和网络技术的高速发展,计算机已经彻底改变了人们的生活方式,当今社会各行各业已经逐步实现了网络化、信息化管理,各种应用系统如雨后春笋般的蓬勃发展。
在这些系统中一般都免不了对文件进行操作与管理。
在文件操作中,最基本的是浏览文件,列出文件清单。
本文探索在VB6.0环境下三种遍历文件的方法并比较它们的优缺点。
1使用FSO对象模型遍历文件1.1 FSO简介FSO(文件系统对象)全称为FileSystemObject,它提供了在Windows中操作本地文件(夹)的功能,FSO对象模型简单易用,在许多高级语言中都被支持。
FSO对象模型可以实现文件(夹)的创建、改变、移动和删除等常见操作,也可以获取文件(夹)的名称、大小、属性、创建日期或最近修改日期等信息,还可以检测文件(夹)是否存在。
通过FSO对象模型也可以获取当前系统驱动器信息,如驱动器的种类(硬盘、CD-ROM还是可移动磁盘)、磁盘剩余空间等等。
VBA中的目录操作与文件搜索方法
![VBA中的目录操作与文件搜索方法](https://img.taocdn.com/s3/m/94fb8364a4e9856a561252d380eb6294dc882259.png)
VBA中的目录操作与文件搜索方法VBA(Visual Basic for Applications)是一种被广泛应用于Microsoft Office套件中的编程语言。
在使用VBA编写宏时,经常需要进行目录操作和文件搜索。
本文将介绍在VBA中进行目录操作和文件搜索的方法。
目录操作是指对目录(即文件夹)进行创建、重命名、删除等操作。
在VBA中,可以使用FileSystemObject对象来实现目录操作。
首先需要在代码的开头添加对Microsoft Scripting Runtime库的引用,然后声明一个FileSystemObject对象,如下所示:```vbaDim fs As ObjectSet fs = CreateObject("Scripting.FileSystemObject")```接下来,可以使用FileSystemObject来进行各种目录操作。
以下是几个常见的目录操作方法:1. 创建目录:使用CreateFolder方法可以创建一个新的目录。
示例如下:```vbafs.CreateFolder "C:\NewFolder"```2. 删除目录:使用DeleteFolder方法可以删除一个目录。
示例如下:```vbafs.DeleteFolder "C:\OldFolder"```3. 检查目录是否存在:使用FolderExists方法可以检查一个目录是否存在。
示例如下:```vbaIf fs.FolderExists("C:\ExistingFolder") ThenMsgBox "目录存在!"ElseMsgBox "目录不存在!"End If```除了目录操作,文件搜索也是VBA中常用的功能。
需要遍历目录中的文件,并根据一定的条件进行搜索。
以下是几个常见的文件搜索方法:1. 遍历目录中的文件:使用GetFolder方法可以获取一个目录的Folder对象,然后使用Files属性获取该目录中的所有文件。
VBA遍历文件夹和子文件夹中所有文件
![VBA遍历文件夹和子文件夹中所有文件](https://img.taocdn.com/s3/m/a65782d5195f312b3169a54a.png)
在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。
兰色对代码进行了注解,希望对大家有所帮助第一种方法:使用filesearch对象Sub mysearch()Dim fs, i, arr(1 To 10000)Set fs = Application.FileSearch '设置一个搜索对象With fs.LookIn = ThisWorkbook.Path & "/" '设置搜索路径.Filename = "*.xls" '要搜索文件名和类型.SearchSubFolders = True '是否需要搜索子文件夹If .Execute > 0 Then '如果找不到文件MsgBox "There were " & .FoundFiles.Count & _" file(s) found." '显示文件找不到For i = 1 To .FoundFiles.Count '通过循环把所有搜索到的文件存入到数组中arr(i) = .FoundFiles(i)Next iSheets(1).Range("A1").Resize(.FoundFiles.Count) = Application.Transpose(arr) ' '把数组内的路径和文件名放在单元格中ElseMsgBox "There were no files found."End IfEnd WithEnd Sub第二种方法:引用FileSystemObject对象注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中代码及注释:Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称Dim cntFiles% '文件个数Public Sub ListAllFiles()Dim strPath$ '声明文件路径Dim i%'Set fso = CreateObject("Scripting.FileSystemObject")Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录cntFiles = 0Set fd = fso.GetFolder(strPath) '设置fd文件夹对象SearchFiles fd '调用子程序查搜索文件Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中End SubSub SearchFiles(ByVal fd As Folder)Dim fl As FileDim sfd As FolderFor Each fl In fd.Files '通过循环把文件逐个放在数组内cntFiles = cntFiles + 1ArrFiles(cntFiles) = fl.PathNext flIf fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的 Folders 集合For Each sfd In fd.SubFolders '在 Folders 集合进行循环查找SearchFiles sfd '使用递归方法查找下一个文件夹NextEnd Sub。
VBA遍历指定目录下的所有子文件夹和文件(DIR)
![VBA遍历指定目录下的所有子文件夹和文件(DIR)](https://img.taocdn.com/s3/m/2fb86f41ac02de80d4d8d15abe23482fb5da0252.png)
VBA遍历指定⽬录下的所有⼦⽂件夹和⽂件(DIR)给⼀个笨笨的办法,使⽤ DIR!'以查找D:\盘下所有EXCEL⽂件为例Sub M_dir()'这是⼀个主模块,中间调⽤两⼈⼦模块,⼀个遍历指定⽬录下的所有⽂件夹,⼀个遍历⽂件夹下的所有EXCEL⽂件代码Application.DisplayAlerts = FalseApplication.ScreenUpdating = FalseOn Error Resume Next = "路径"If Err.Number <> 0 ThenActiveSheet.DeleteSheets("路径").Cells.DeleteErr.Clear: On Error GoTo 0End IfSet Sh = Sheets("路径")Sh.[a1] = "D:\"'以查找D盘下所有EXCEL⽂件为例i = 1Do While Sh.Cells(i, 1) <> ""dirdir (Sh.Cells(i, 1))i = i + 1LoopOn Error Resume Next = "XLS⽂件"If Err.Number <> 0 ThenActiveSheet.DeleteSheets("XLS⽂件").Cells.DeleteErr.Clear: On Error GoTo 0End IfSet sh2 = Sheets("XLS⽂件")sh2.Cells(1, 1) = "⽂件清单"For Each cel In Sh.[a1].CurrentRegionCall dirf(cel.Value)NextEnd SubSub dirf(My_Path)'遍历⽂件夹下的所有EXCEL⽂件Set sh2 = Sheets("XLS⽂件")mm = sh2.[a65536].End(xlUp).Row + 1MyFilename = Dir(My_Path & "*.xl*")Do While MyFilename <> ""sh2.Cells(mm, 1) = My_Path & MyFilenamemm = mm + 1MyFilename = DirLoopEnd SubSub dirdir(MyPath)'遍历指定⽬录下的所有⽂件夹Dim MyNameSet Sh = Sheets("路径")MyName = Dir(MyPath, vbDirectory)m = Sh.[a65536].End(xlUp).Row + 1Do While MyName <> ""If MyName <> "." And MyName <> ".." ThenIf (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory ThenSh.Cells(m, 1) = MyPath & MyName & "\"m = m + 1End IfEnd IfMyName = DirLoopEnd Sub。
VBA中的文件路径与目录操作技巧
![VBA中的文件路径与目录操作技巧](https://img.taocdn.com/s3/m/d3bad1ce8662caaedd3383c4bb4cf7ec4afeb62a.png)
VBA中的文件路径与目录操作技巧VBA(Visual Basic for Applications)是一种编程语言,用于在Microsoft Office中自定义宏和程序。
在进行文件处理时,了解和熟练掌握VBA中的文件路径和目录操作技巧是非常重要的。
本文将介绍一些在VBA中处理文件路径和目录的常用技巧和方法。
1. 获取当前工作目录使用VBA的CurDir函数可以获取当前工作目录的路径。
该函数返回一个字符串,表示当前工作目录的完整路径。
下面是一个示例:```vbaSub GetCurrentDirectory()Dim currentPath As StringcurrentPath = CurDirMsgBox currentPathEnd Sub```2. 获取文件路径和文件名使用VBA的FileOpen函数可以打开一个文件,获取其路径和文件名。
通过获取文件路径和文件名,我们可以进行进一步的处理。
下面是一个示例:```vbaSub GetFilePathAndFileName()Dim filePath As StringDim fileName As StringfilePath = Application.GetOpenFilename()fileName = Mid(filePath, InStrRev(filePath, "\") + 1,Len(filePath) - InStrRev(filePath, "\"))MsgBox "文件路径:" & filePath & vbCrLf & "文件名:" & fileNameEnd Sub```3. 检查目录是否存在在VBA中,可以使用Dir函数来检查指定目录是否存在。
Dir函数返回一个非空字符串,表示目录存在;返回一个空字符串,表示目录不存在。
VBA中文件夹遍历的实用技巧
![VBA中文件夹遍历的实用技巧](https://img.taocdn.com/s3/m/efd23b3703768e9951e79b89680203d8cf2f6a72.png)
VBA中文件夹遍历的实用技巧VBA(Visual Basic for Applications)是一种在Microsoft Office应用程序中嵌入的编程语言,可以用于自动化处理任务、创建宏以及增强应用程序的功能。
在许多情况下,我们需要操作大量的文件和文件夹,而文件夹遍历是一项十分常见且实用的任务。
本文将介绍一些在VBA中进行文件夹遍历的实用技巧,帮助您更高效地处理文件和文件夹。
1. 获取文件夹路径在开始文件夹遍历之前,首先需要获取要遍历的文件夹的路径。
可以使用VBA中的`Application.FileDialog(msoFileDialogFolderPicker)`方法来打开文件夹选择对话框,让用户选择要遍历的文件夹,并将所选文件夹的路径保存到一个变量中。
以下是一个示例代码:```vbaDim myFolder As StringWith Application.FileDialog(msoFileDialogFolderPicker).Title = "选择要遍历的文件夹"If .Show = -1 ThenmyFolder = .SelectedItems(1)End IfEnd With```在这个示例代码中,用户将会看到一个打开文件夹选择对话框,可以选择要遍历的文件夹。
如果用户选择了文件夹并点击了对话框的“确定”按钮,那么所选文件夹的路径将保存到`myFolder`变量中。
2. 遍历文件夹获取到要遍历的文件夹路径后,就可以开始实际的文件夹遍历了。
可以使用VBA中的`FileSystemObject`对象来处理文件和文件夹。
以下是一个示例代码,展示了如何遍历文件夹并输出其中的文件名:```vbaSub TraverseFolder(ByVal folderPath As String)Dim fso As ObjectDim folder As ObjectDim file As ObjectSet fso = CreateObject("Scripting.FileSystemObject")Set folder = fso.GetFolder(folderPath)For Each file In folder.FilesDebug.Print ' 在此处添加你想要做的操作,比如复制、移动、重命名文件等等Next fileFor Each folder In folder.SubfoldersTraverseFolder folder.Path' 在此处添加你想要做的操作,比如创建子文件夹、获取文件夹大小等等Next folderSet fso = NothingSet folder = NothingSet file = NothingEnd Sub```在这个示例代码中,通过调用`TraverseFolder`子过程并传入文件夹路径,可以遍历文件夹及其子文件夹中的所有文件。
vb遍历文件夹与遍历文件
![vb遍历文件夹与遍历文件](https://img.taocdn.com/s3/m/6c8eeeeeba4cf7ec4afe04a1b0717fd5360cb2b9.png)
vb遍历文件夹与遍历文件[vb]view plaincopy1.Public Sub Search_wenjian() '遍历文件获得文件名称2.3.Dim sPath As String4.'查找文件夹5.sPath = Dir(path, vbDirectory) '查找第一个文件夹6.Do While Len(sPath) '循环到没有文件夹为止7.If Left(sPath, 1) <> "." Then '为了防止重复查找8.If GetAttr(path & "\" & sPath) And vbDirectory Then '如果是文件夹则。
9.Folder_num = Folder_num + 110.11.'Folder(b) = path & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中12.Folder_file(Folder_num - 1) = sPath13.'Folder_file_path(Folder_num - 1) = path & sPath & "\"14.End If15.End If16.sPath = Dir '查找下一个文件夹17.DoEvents '让出控制权18.Loop19.20.End Sub21.22.Public Sub Search_file_in_folder(folder_name As String ) '遍历指定文件夹下的所有文本文件23.Dim Files() As String24.Dim a As Integer25.FileType = "*.*"26.sPath = Dir(folder_name & FileType) '查找第一个文件27.28.Do While Len(sPath) '循环到没有文件为止29. a = a + 130.ReDim Preserve Files(1 To a)31.Files(a) = path & sPath '将文件目录和文件名组合,并存放到数组中32.33.sPath = Dir '查找下一个文件34.DoEvents '让出控制权35.Loop36.37.End Sub。
用vba遍历文件夹和子文件夹中的所有文件
![用vba遍历文件夹和子文件夹中的所有文件](https://img.taocdn.com/s3/m/0cd5b61c66ec102de2bd960590c69ec3d5bbdbe2.png)
用vba遍历文件夹和子文件夹中的所有文件在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。
兰色对代码进行了注解,希望对大家有所帮助第二种方法:引用FileSystemObject对象注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中代码及注释:Dim ArrFiles(1 T o 10000) '创建一个数组空间,用来存放文件名称Dim cntFiles% '文件个数Public Sub ListAllFiles()Dim strPath$ '声明文件路径Dim i%'Set fso = CreateObject("Scripting.FileSystemObject")Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录cntFiles = 0Set fd = fso.GetFolder(strPath) '设置fd文件夹对象SearchFiles fd '调用子程序查搜索文件Sheets(1).Range("A1").Resize(cntFiles) =Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中End SubSub SearchFiles(ByVal fd As Folder)Dim fl As FileDim sfd As FolderFor Each fl In fd.Files '通过循环把文件逐个放在数组内cntFiles = cntFiles + 1ArrFiles(cntFiles) = fl.PathNext flIf fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合For Each sfd In fd.SubFolders '在Folders 集合进行循环查找SearchFiles sfd '使用递归方法查找下一个文件夹NextEnd Sub。
用VBA遍历指定文件夹里包括子文件夹里的所有文件
![用VBA遍历指定文件夹里包括子文件夹里的所有文件](https://img.taocdn.com/s3/m/45d5067b49d7c1c708a1284ac850ad02de80079f.png)
用VBA遍历指定文件夹里包括子文件夹里的所有文件如何用VBA遍历指定文件夹内的所有文件?如果仅仅是指定文件夹下的文件而不包括子文件夹内文件的话,那好办。
一个Do...While加上Dir就可以搞定。
要包括子文件夹,那就要费一番小功夫了。
网上没有找到用Dir的完美答案,所以参考网上的思路,根据自己的理解编了一个,以备后用。
主要还是利用两个字典对象及递归的思想。
------------------------------------------------Sub test()Dim startfolder As Stringstartfolder = "D:\starcraft\" '指定文件夹Set folderlist = CreateObject("scripting.dictionary")Set filelist = CreateObject("scripting.dictionary")i = 1folderlist.Add startfolder, ""Do While folderlist.Count > 0For Each FolderName In folderlist.keysfname = Dir(FolderName, vbDirectory)Do While fname <> ""If fname <> ".." And fname <> "." ThenIf GetAttr(FolderName & fname) And vbDirectory Thenfolderlist.Add FolderName & fname & "\", ""Elsefilelist.Add FolderName & fname, "" '这里列出的该文件的路径+文件名End IfEnd Iffname = DirLoopfolderlist.Remove (FolderName)NextLoopFor Each arr In filelist.keys ‘将文件路径+文件名放在当前工作表的A列Range("A" & i).Value = arri = i + 1NextEnd Sub。
VBA遍历文件夹下文件文件实用源码
![VBA遍历文件夹下文件文件实用源码](https://img.taocdn.com/s3/m/02996e1915791711cc7931b765ce0508763275cb.png)
VBA遍历⽂件夹下⽂件⽂件实⽤源码‘批量遍历⽂件夹下某类⽂件,并统计编号Sub OpenAndClose()Dim MyFile As StringDim s As StringDim count As IntegerMyFile = Dir("d:\data\" & "*.csv")'读⼊⽂件夹中第⼀个.xlsx⽂件count = count + 1 '记录⽂件的个数s = s & count & "、" & MyFileDo While MyFile <> " "MyFile = Dir '第⼆次读⼊的时候不⽤写参数If MyFile = "" ThenExit Do '当myfile为空时候说明已经遍历完了,推出do,否则要重新运⾏⼀遍End Ifcount = count + 1If count Mod 2 <> 1 Thens = s & vbTab & count & "、" & MyFileElses = s & vbCrLf & count & "、" & MyFileEnd IfLoopDebug.Print sEnd Sub‘遍历每个⽂件,并且修改⽂件,先将⽂件的名字存在数组中,然后通过数组遍历打开每个⽂件,修改,再关闭⽂件~Sub OpenCloseArray()Dim MyFile As StringDim Arr(100) As StringDim count As IntegerMyFile = Dir("D:\data\data2\" & "*.xlsx")count = count + 1Arr(count) = MyFileDo While MyFile <> ""MyFile = DirIf MyFile = "" ThenExit DoEnd Ifcount = count + 1Arr(count) = MyFile '将⽂件的名字存在数组中LoopFor i = 1 To countWorkbooks.Open Filename:="d:\data\data2\" & Arr(i) '循环打开Excel⽂件Sheet1.Cells(2, 2) = "alex_bn_lee" '修改打开⽂件的内容ActiveWorkbook.Close savechanges = True '关闭打开的⽂件Next‘要是想要修改每个⼯作簿的内容可以这样遍历⼀下,显⽰将⽂件夹中的⼯作簿的名字存到’⼀个字符串数组中,然后在⽤For...Next语句遍历‘遍历某个⽂件夹中的所有⽂件(*.*)’注意:遍历的时候,顺序完全是按照⽂件名的顺序排的,⽽不是按照⽂件夹中⽂件的顺序~Sub dlkfjdl()Dim MyFile As StringDim count As Integercount = 1MyFile = Dir("d:\data\*.*")Debug.Print "1、" & MyFileDo While MyFile <> ""count = count + 1MyFile = DirIf MyFile = "" Then Exit DoDebug.Print count & "、" & MyFileLoopEnd Sub。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2007年05月05日 星期六 14:59
VB 中遍历目录,遍历目录查找文件的2个实现方法
方法1:API实现
将下列代码保存到一个模块中,就可以直接调用了
--------------------------------------------------------------------------------
'最大路径长度和文件属性常量定义
Public Const MAX_PATH = 260
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
'自定义数据类型FILETIME和WIN32_FIND_DATA的定义
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_SYSTEM = &H4
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
"FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long