我正在处理一个excel电子表格,其中包含A列中的标题列表,以及D列中的文件名列表。文件名是使用特定的命名约定创建的,该约定基于A列中的标题。例如,如果A1中的标题是“Taco_123”,那么D1中的文件名将包含确切的短语“Taco_123”。
目前,必须在创建文件后手动将文件名输入D1。但我想要的是一个自动执行此操作的VBA脚本。我的想法是,对于每一行,它将读取A列中的标题,在文件所在的目录中搜索包含该精确短语的文件,然后将文件名(减去扩展名)复制到D列中。
这样的事情是否可能?我已经尝试过在线搜索解决方案,因为我知道有关VBA的问题,但我运气不好;我甚至找不到有同样问题的人。任何帮助将不胜感激。
编辑:我不知道这是否有所不同,但需要搜索匹配文件名的文件类型是PSD。
答案 0 :(得分:1)
这样的事情肯定是可能的。有一种简单的方法可以在旧版本的Excel中使用Application.FileSearch在Excel 2003和之前的版本中执行此操作。对于2007年及更新版本,您必须使用或修改P. Havdra的解决方案,此处:
http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/a450830d-4fc3-4f4e-aee2-03f7994369d6/
此脚本打印出与您的搜索参数匹配的文件列表,并且还会弹出一个恼人的消息框。
我对他的FileSearch子例程进行了一些修改,以帮助您入门。这将在指定的目录中构建一组匹配的PSD文件名,然后您可以对数组执行操作并与工作表数据进行交互。
Sub FileSearch()
'
' Example of FileSearchByHavrda procedure calling as replacement of missing FileSearch function in the newest MS Office VBA
' 01.06.2009, Author: P. Havrda, Czech Republic
'As modified Feb-13-2013, David Zemens, for _
http://stackoverflow.com/questions/14865258/populate-cell-with-a-filename-based-on-path-excerpt-in-previous-cell
'
Dim sDir As String '< this is the search directory you will use
Dim FileNameWithPath As Variant
Dim ListOfFilenamesWithParh As New Collection ' create a collection of filenames
Dim rCount As Long 'row counter
Dim myArray() As Variant
Dim a As Long 'array iterator
a = 0
'Set the search directory:
sDir = "C:\DESKTOP\" '<-- MODIFY TO SUIT YOUR NEEDS
' Filling a collection of filenames (search Excel files including subdirectories)
Call FileSearchByHavrda(ListOfFilenamesWithParh, sDir, "*.psd", False)
' Print list to immediate debug window and as a message window
For Each FileNameWithPath In ListOfFilenamesWithParh ' cycle for list(collection) processing
'Create an array of matching filenames
ReDim Preserve myArray(a)
myArray(a) = FileNameWithPath
a = a + 1
Next FileNameWithPath
' If no file was found:
If ListOfFilenamesWithParh.Count = 0 Then
'Debug.Print "No file was found !"
MsgBox "No file was found !"
Else:
'some files were found, so do something with myArray
'########################################################
'
' <-- Code to manipulate your worksheet will go here -->
'
'
'########################################################
End If
End Sub