VBA:循环浏览文件夹中的文件,并从包含特定字符串的所有文件中获取信息

VBA:循环浏览文件夹中的文件,并从包含特定字符串的所有文件中获取信息,vba,excel,Vba,Excel,我一直在尝试为VBA编写一个代码,在给定用户输入的文件夹路径的情况下,该代码将循环遍历文件夹,并根据文件名是否包含特定字符串,在我的工作手册中粘贴一些信息,如单元格范围和文件名 目前,我有一个代码,它将采用excel中单元格1,1中输入的文件夹路径,但它将返回所有文件名,而不仅仅是包含“abc”的文件名。我已经有一段时间没有使用VBA了,这是我重新使用VBA的方法 Sub getFile() Dim MyFolder As String Dim file As String MyFolder

我一直在尝试为VBA编写一个代码,在给定用户输入的文件夹路径的情况下,该代码将循环遍历文件夹,并根据文件名是否包含特定字符串,在我的工作手册中粘贴一些信息,如单元格范围和文件名

目前,我有一个代码,它将采用excel中单元格1,1中输入的文件夹路径,但它将返回所有文件名,而不仅仅是包含“abc”的文件名。我已经有一段时间没有使用VBA了,这是我重新使用VBA的方法

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*”那么
,等等。^这就是我想做的,但事情太复杂了@拉尔夫肯定是一针见血。谢谢你的意见