VBA检查文件是否存在于子文件夹中

我在VBA比较业余,并使用networking上的技术提供的代码。

我有一个Excel文件的B列(不一定是一个文件types)的文件名,我试图确保我有副本和指定文件夹中的正确版本。

目前,该代码完美适用于特定的文件夹位置,但Excel电子表格中引用的文件存在于各种其他文件夹中,因此我需要创build一个可以search主文件夹并通过各个子文件夹循环的代码。

查看下面的当前代码以供参考。

Sub CheckIfFileExists() Dim LRow As Integer Dim LPath As String Dim LExtension As String Dim LContinue As Boolean 'Initialize variables LContinue = True LRow = 8 LPath = "K:\location\main folder\sub folder \sub folder" LExtension = ".pdf" 'Loop through all column B values until a blank cell is found While LContinue 'Found a blank cell, do not continue If Len(Range("B" & CStr(LRow)).Value) = 0 Then LContinue = True 'Check if file exists for document title Else 'Place "No" in column E if the file does NOT exist If Len(Dir(LPath & Range("B" & CStr(LRow)).Value & LExtension)) = 0 Then Range("E" & CStr(LRow)).Value = "No" 'Place "Yes" in column E if the file does exist Else Range("E" & CStr(LRow)).Value = "Yes" End If End If LRow = LRow + 1 Wend End Sub 

有超过1000个文件,所以简单的Windowssearch是不理想的,我已经回顾了几个以前的问题,找不到有帮助的答案。

好的,我的答案将围绕你的问题提出2条评论。 这只会作为您改善和适应您需要的基础。

注意跳到我的答案底部查看完整的工作代码

第一个评论是:

我需要创build一个代码,可以search一个主文件夹,并循环通过各种子文件夹。

我将在下面解释的代码将需要一个主文件夹, 您将需要指定 ,然后它将循环通过父directoy的所有子文件夹。 所以你不需要担心特定的子文件夹。 只要你知道你想访问的文件名字 ,代码就会发现它。

第二个是你的代码的一行:

LPath = "K:\location\main folder\sub folder \sub folder"

这行代码将构成UDF(用户定义函数)的一部分,我将在下面显示。

步骤1

将LPath重新标记为所谓的“主机文件夹”。 这是主要的文件夹。 例如: Host Folder = "K:\User\My Documents\" (注意最后需要反斜杠)

第2步

在2个地方设置对Microsoft脚本运行时的引用:

我)在代码中

Set FileSystem = CreateObject("Scripting.FileSystemObject")

ii)在VBA编辑器中 。 (关于如何在VBA编辑器中查找参考库的基本谷歌search)

第3步

这是主要的元素,这是一个子例程,它会find文件,无论它在哪里,提供一个文件名主机文件夹已经提供。

 Sub DoFolder(Folder) Dim SubFolder For Each SubFolder In Folder.SubFolders DoFolder SubFolder Next Dim File For Each File In Folder.Files If File.Name = "Specify Name.pdf" Then Workbooks.Open (Folder.path & "\" & File.Name), UpdateLinks:=False Workbooks(File.Name).Activate Exit Sub End If Next End Sub 

上面的代码只要find它就可以打开文件。 这只是我自己的具体用途; 必要时适应。

主要代码

 Option Explicit Dim FileSystem As Object Dim HostFolder As String Sub FindFile() HostFolder = "K:\User\My Documents\" Set FileSystem = CreateObject("Scripting.FileSystemObject") DoFolder FileSystem.GetFolder(HostFolder) End Sub Sub DoFolder(Folder) Dim SubFolder For Each SubFolder In Folder.SubFolders DoFolder SubFolder Next Dim File For Each File In Folder.Files If File.Name = "Specify Name.pdf" Then Workbooks.Open (Folder.path & "\" & File.Name), UpdateLinks:=False Workbooks(File.Name).Activate Exit Sub End If Next End Sub 

你可以把它看做是合适的,你可以把它放到你的子CheckIfFileExists()中,或者直接使用它。

让我知道你如何相处,所以我可以帮助你进一步了解这一点