我需要在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
关于为什么上面的代码不起作用以及是否有更好的解决方案来搜索文件的子文件夹的任何想法?
答案 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