VBA:循环浏览文件夹中的文件,并从包含特定字符串的所有文件中获取信息
我一直在尝试为VBA编写一个代码,在给定用户输入的文件夹路径的情况下,该代码将循环遍历文件夹,并根据文件名是否包含特定字符串,在我的工作手册中粘贴一些信息,如单元格范围和文件名 目前,我有一个代码,它将采用excel中单元格1,1中输入的文件夹路径,但它将返回所有文件名,而不仅仅是包含“abc”的文件名。我已经有一段时间没有使用VBA了,这是我重新使用VBA的方法VBA:循环浏览文件夹中的文件,并从包含特定字符串的所有文件中获取信息,vba,excel,Vba,Excel,我一直在尝试为VBA编写一个代码,在给定用户输入的文件夹路径的情况下,该代码将循环遍历文件夹,并根据文件名是否包含特定字符串,在我的工作手册中粘贴一些信息,如单元格范围和文件名 目前,我有一个代码,它将采用excel中单元格1,1中输入的文件夹路径,但它将返回所有文件名,而不仅仅是包含“abc”的文件名。我已经有一段时间没有使用VBA了,这是我重新使用VBA的方法 Sub getFile() Dim MyFolder As String Dim file As String MyFolder
Sub getFile()
Dim MyFolder As String
Dim file As String
MyFolder = Cells(1, 1)
file = Dir(MyFolder & ".xl??")
Dim col As Integer
col = 2
Do While file <> ""
Cells(3, col) = file
col = col + 1
file = Dir()
Loop
End Sub
Sub-getFile()
将MyFolder设置为字符串
将文件设置为字符串
MyFolder=单元格(1,1)
file=Dir(MyFolder&“.xl??”)
作为整数的Dim col
col=2
文件“”时执行此操作
单元格(3,列)=文件
col=col+1
file=Dir()
环
端接头
我的问题是,我还没有找到一种方法来合并一个“如果”,即只使用包含字符串“abc”的文件
谢谢大家 尝试使用
file = Dir(MyFolder & "*abc*.xl??")
而不是
file = Dir(MyFolder & ".xl??")
为了结束这篇文章,为了不出现另一个悬而未决的问题(答案在评论中),我将我的评论重新发布在这里作为一个解决方案。我认为你没有说清楚,但我相信你想循环浏览名称中包含“abc”的文件,对吗 如果是这样,在声明变量“file”时,在Dir函数中使用星号,如下所示:
file = Dir(MyFolder & "*abc*.xl*")
这是一个很好的示例,如果您只需稍微修改一下代码,它将完成您想要的一切,而且还有很多其他功能 从名为“立即下载”的链接下载示例文件
Sub GetFilesInFolder(SourceFolderName As String)
'--- For Example:Folder Name= "D:\Folder Name\"
Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.folder, SubFolder As Scripting.folder
Dim FileItem As Scripting.File
Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder(SourceFolderName)
'--- This is for displaying, whereever you want can be configured
r = 14
For Each FileItem In SourceFolder.Files
Cells(r, 2).Formula = r - 13
Cells(r, 3).Formula = FileItem.Name
Cells(r, 4).Formula = FileItem.Path
Cells(r, 5).Formula = FileItem.Size
Cells(r, 6).Formula = FileItem.Type
Cells(r, 7).Formula = FileItem.DateLastModified
Cells(r, 8).Formula = "=HYPERLINK(""" & FileItem.Path & """,""" & "Click Here to Open" & """)"
r = r + 1 ' next row number
Next FileItem
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
End Sub
Sub GetFilesInFolder(SourceFolderName As String, Subfolders As Boolean)
'--- For Example:Folder Name= "D:\Folder Name\" and Flag as Yes or No
Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.folder, SubFolder As Scripting.folder
Dim FileItem As Scripting.File
'Dim r As Long
Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder(SourceFolderName)
'--- This is for displaying, whereever you want can be configured
r = 14
For Each FileItem In SourceFolder.Files
Cells(r, 2).Formula = r - 13
Cells(r, 3).Formula = FileItem.Name
Cells(r, 4).Formula = FileItem.Path
Cells(r, 5).Formula = FileItem.Size
Cells(r, 6).Formula = FileItem.Type
Cells(r, 7).Formula = FileItem.DateLastModified
Cells(r, 8).Formula = "=HYPERLINK(""" & FileItem.Path & """,""" & "Click Here to Open" & """)"
r = r + 1 ' next row number
Next FileItem
'--- This is the Function to go each and Every Folder and get the Files. This is a Nested-Function Calling.
If Subfolders = True Then
For Each SubFolder In SourceFolder.Subfolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
End Sub
怎么样
file=Dir(MyFolder&“*abc*.xl?”)
Wow,比我刚才写的一页半容易多了。。谢谢,我想有时候你只是需要一个新鲜的头脑@拉尔夫有一个最好的主意,但是如果你真的想用一个if
语句来实现这一点,它可能会像如果Instr(file,“abc”)>0那么单元格(3,col)=file
col=col+1
如果结束,或者如果file像“*abc*”那么
,等等。^这就是我想做的,但事情太复杂了@拉尔夫肯定是一针见血。谢谢你的意见