在子目录中查找文件

时间:2018-03-23 09:41:57

标签: vba file subdirectory

我需要在VBA中执行代码才能在子目录中找到文件。

使用' brettdj'的代码在这个link中,如果我指定完整目录,我可以找到该文件

Sub LoopThroughFiles()
    Dim MyObj As Object, MySource As Object, file As Variant
    file = Dir("\\A\B\C\D\")
    While (file <> "")
        If InStr(file, "701000034955") > 0 Then
            MsgBox "found " & file
            Exit Sub
        End If
    file = Dir
  Wend
End Sub

我正在寻找一个不必指定完整目录的原因。

我尝试了link中的代码,但我得到了一个类型错误匹配&#39;最后一行中的错误消息

Sub Find_Files()       
    f = "\\A\B\"        
    ibox = "701000034955"        
    sn = Split(CreateObject("wscript.shell").exec("cmd /c Dir """ & f & ibox & """ /s /a /b").stdout.readall, vbCrLf)         
    Sheets("Sheet1").[A1].Resize(UBound(sn) + 1) = Application.Transpose(sn) ' I get an error message in this line    
End Sub

关于为什么上面的代码不起作用以及是否有更好的解决方案来搜索文件的子文件夹的任何想法?

2 个答案:

答案 0 :(得分:1)

对于底部,不要忘记使用其扩展名完全限定文件名,并考虑使用路径分隔符进行连接。例如:

Sub Find_Files()

    Dim f As String

    f = ThisWorkbook.Path
    ibox = "701000034955.xlsb"
    sn = Split(CreateObject("wscript.shell").exec("cmd /c Dir """ & f & Application.PathSeparator & ibox & """ /s /a /b").stdout.readall, vbCrLf)
    Sheets("Sheet1").[A1].Resize(UBound(sn) + 1) = Application.Transpose(sn)

End Sub

答案 1 :(得分:1)

你的第二个代码与第一个代码的不同之处在于后者搜索给定文件夹(和子文件夹)中的任何文件,其名称正好是&#34; 701000034955&#34; 而前者搜索名称​​包含该字符串

的文件

因此我想你只需要使用一些野人

ibox = "*701000034955*" 
sn = Split(CreateObject("wscript.shell").exec("cmd /c Dir """ & f & Application.PathSeparator & ibox & """ /s /a /b").stdout.readall, vbCrLf)
Sheets("Sheet1").[A1].Resize(UBound(sn)) = Application.Transpose(sn)

请注意,调整大小为UBound(sn)而不是UBound(sn) + 1,因为在vbCrlf

的最后位置生成一个空条目sn