2010-05-18 5 views

Antwort

13

filename*esy ist bereits eine „Schale bereit“ Wildcard & wenn das ist, alle Tage der Fall können Sie einfach;

const SOME_PATH as string = "c:\rootdir\" 
... 
Dim file As String 
file = Dir$(SOME_PATH & "filename*esy" & ".*") 

If (Len(file) > 0) Then 
    MsgBox "found " & file 
End If 

Gerade Anruf (oder Schleife, bis leer) file = Dir$() das nächste Spiel zu bekommen.

1
If InStr(sFilename, "filename") > 0 and InStr(sFilename, "esy") > 0 Then 
'do somthing 
end if 

Oder Sie können RegEx verwenden

Dim RE As Object, REMatches As Object 

    Set RE = CreateObject("vbscript.regexp") 
    With RE 
     .MultiLine = False 
     .Global = False 
     .IgnoreCase = True 
     .Pattern = "filename(.*)esy" 
    End With 

    Set REMatches = RE.Execute(sFilename) 
    REMatches(0) 'find match 
+0

aus irgendeinem Grund ging ich davon aus, dass die Datei geöffnet war. Hoppla – Glennular

2

Es gibt eine Application.FileSearch Sie (siehe unten) verwenden können. Damit könnten Sie nach Dateien suchen, die Ihrem Muster entsprechen. Diese Information stammt von here.

Sub App_FileSearch_Example() 

    With Application.FileSearch 
     .NewSearch 
     .LookIn = "c:\some_folder\" 
     .FileName = "filename*esy" 
     If .Execute(SortBy:=msoSortByLastModified, SortOrder:=msoSortOrderDescending) > 0 Then  
      For i1 = 1 To .FoundFiles.Count 
       ' do something with matched file(s) 
      Next i1 

     End If 

    End With  
End Sub 
0

Ich habe diese Frage als eine Funktion versucht. Das ist die Lösung, die für mich funktioniert hat.

Function fileName(path As String, sName As String, ext As String) As Variant 

'path is Full path from root. Can also use path = ActiveWorkbook.path & "\" 
'sName is the string to search. ? and * are wildcards. ? is for single char 
'example sName = "book?" or sName ="March_*_2014*" 
'ext is file extention ie .pdf .xlsm .xls? .j* 

Dim file As Variant 'Store the next result of Dir 
Dim fname() As String 'Dynamic Array for result set 
ReDim fname(0 To 0) 
Dim i As Integer ' Counter 
i = 0 

' Use dir to search and store first result 
fname(i) = path & Dir(path & "\" & sName & ext) 
i = i + 1 

'Load next result 
file = Dir 

While file <> "" 'While a file is found store that file in the array 
    ReDim Preserve fname(0 To i) As String 
    fname(i) = path & file 
    file = Dir 
Wend 

fileName = Application.Transpose(fname) 'Print out array 

End Function 

Dies funktioniert für mich als Einzel- oder Array-Funktion.

0

Wenn Sie wissen, dass keine andere Datei in dieser Reihenfolge „Dateiname“ und „esy“ enthält, dann können Sie einfach verwenden

Workbooks.Open Filename:= "Filepath\filename*esy.*" 

Oder wenn Sie die Anzahl der fehlenden Zeichen wissen dann (unter der Annahme, 4 Zeichen unbekannt)

Workbooks.Open Filename:= "Filepath\filename????esy.*" 

ich benutze diese Methode Code auf Dateien ausführen, das Datum & timestamped sind die Zeitstempel Teil zu ignorieren.

Verwandte Themen