我在VBA比较业余,并且在网上使用技术提供的代码。
我有一个包含B列文件名的Excel文档(并不总是一种文件类型),我试图确保我在指定的文件夹中有副本和正确的版本。
目前,代码适用于特定的文件夹位置,但Excel电子表格中引用的文件存在于各种其他文件夹中,因此我需要创建一个代码,可以搜索主文件夹并循环遍历各个子文件夹。
请参阅下面的当前代码以供参考。
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个文档,所以简单的窗口搜索并不理想,我已经回顾了以前的几个问题,找不到有帮助的答案。
答案 0 :(得分:2)
好的,我的答案将围绕您的问题提出两条评论。这只会作为您改进和适应您需要的基础。
N.B跳到我的答案底部查看完整的工作代码
第一条评论是:
我需要创建一个代码,可以搜索主文件夹并遍历各个子文件夹。
我将在下面解释的代码将采用MAIN FOLDER,您需要指定,然后它将遍历父Directoy的所有子文件夹。因此您无需担心特定的子文件夹。只要您知道要访问的文件名,代码就会找到它。
第二行是你的代码:
LPath = "K:\location\main folder\sub folder \sub folder"
这行代码将构成我将在下面显示的UDF(用户定义函数)的一部分。
第1步
将LPath重新标记为所谓的"主机文件夹"。这是主要的文件夹。
例如:Host Folder = "K:\User\My Documents\"
(注意最后需要反斜杠)
第2步
在2个位置设置对Microsoft Scripting Runtime的引用:
i)在代码中
Set FileSystem = CreateObject("Scripting.FileSystemObject")
ii)在VBA编辑器中。 (关于如何在VBA编辑器中查找参考库的基本谷歌搜索)
第3步
这是主要元素,这是一个子程序,无论它在何处都可以找到该文件,提供文件名和主机文件夹。
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
上面的代码只需在找到文件后立即打开。这只是我自己的具体用途;必要时适应。
主要代码
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()或者单独使用它。
让我知道你是如何相处的,这样我可以帮助你进一步理解