VBA Excel在一组文件夹中查找文件(部分文件名)
早上好/下午好/晚上好 我想为下面的代码提供一些语法帮助,或者为我指明做得更好的方向,因为有一些事情不太正确 我最初在一个文件夹宏中有一个文件列表,我已经调整了它来尝试做我想做的事情 接下来,我有一个stem文件名列表(strDesignDocs),我有一个顶部文件夹,在那里我可以找到这些文件的一个版本(combobox21.value) 我将顶部文件夹路径和零件文件名输入到ListMyFiles函数中,希望仅出于测试目的,它将为我提供已找到的完整文件名以及完整文件夹路径的消息。它确实在函数中打印消息,但希望它将消息传递回调用函数,以便最终对其执行其他操作 代码如下:VBA Excel在一组文件夹中查找文件(部分文件名),excel,windows-7,excel-2010,vba,Excel,Windows 7,Excel 2010,Vba,早上好/下午好/晚上好 我想为下面的代码提供一些语法帮助,或者为我指明做得更好的方向,因为有一些事情不太正确 我最初在一个文件夹宏中有一个文件列表,我已经调整了它来尝试做我想做的事情 接下来,我有一个stem文件名列表(strDesignDocs),我有一个顶部文件夹,在那里我可以找到这些文件的一个版本(combobox21.value) 我将顶部文件夹路径和零件文件名输入到ListMyFiles函数中,希望仅出于测试目的,它将为我提供已找到的完整文件名以及完整文件夹路径的消息。它确实在函数中打
Dim iRow
暗色计数器
将myFile设置为脚本.File
子列表文件()
将WS1、WS2标注为工作表
Dim strDesignDocs作为变量
出错时继续下一步
设置WS1=图纸(“数据”)
设置WS2=工作表(“清理”)
使用WS1
设置strDesignDocs=.Range(.Cells(15,1),.Cells(27,1))
以
对于strDesignDocs中的每个单元格
strReturnValue=ListMyFiles(ComboBox21.Value,True,cell.Value)
调试。打印strerturnvalue
下一个
端接头
函数ListMyFiles(mySourcePath,IncludeSubfolders,sFileName)
将MyObject设置为Scripting.FileSystemObject
出错时继续下一步
设置MyObject=New Scripting.FileSystemObject
设置mySource=MyObject.GetFolder(mySourcePath)
对于mySource.Files中的每个myFile
如果InStr(1,myFile.Name,sFileName)为0,则
strReport=myFile.Name&“in”&myFile.Path
ListMyFiles=strReport
'Debug.Print strReport
退出功能
如果结束
下一个
如果包含子文件夹,则
对于mySource.SubFolders中的每个mySubFolder
调用ListMyFiles(mySubFolder.Path,True,sFileName)
下一个
如果结束
端函数
要解决它不返回任何内容的问题,您需要声明函数Return:函数ListMyFiles(mySourcePath,IncludeSubfolders,sFileName)正如String
@ScottHoltzman为回复喝彩,但仍然没有传回String你是否真的一行一行地通过代码进行调试,看看它到底在做什么?如果没有,那就这么做吧,我打赌你会找到它不返回任何东西的原因。是的,还是一样,我已经放弃了让它工作
Dim iRow
Dim Counter
Dim myFile As Scripting.File
Sub ListFiles()
Dim WS1, WS2 As Worksheet
Dim strDesignDocs As Variant
On Error Resume Next
Set WS1 = Sheets("Data")
Set WS2 = Sheets("Clean_Up")
With WS1
Set strDesignDocs = .Range(.Cells(15, 1), .Cells(27, 1))
End With
For Each cell In strDesignDocs
strReturnValue = ListMyFiles(ComboBox21.Value, True, cell.Value)
Debug.Print strReturnValue
Next
End Sub
Function ListMyFiles(mySourcePath, IncludeSubfolders, sFileName)
Dim MyObject As Scripting.FileSystemObject
On Error Resume Next
Set MyObject = New Scripting.FileSystemObject
Set mySource = MyObject.GetFolder(mySourcePath)
For Each myFile In mySource.Files
If InStr(1, myFile.Name, sFileName) <> 0 Then
strReport = myFile.Name & " in " & myFile.Path
ListMyFiles = strReport
'Debug.Print strReport
Exit Function
End If
Next
If IncludeSubfolders Then
For Each mySubFolder In mySource.SubFolders
Call ListMyFiles(mySubFolder.Path, True, sFileName)
Next
End If
End Function