2010-05-18 10 views

Respuesta

13

filename*esy ya es un "depósito lista" comodín & si eso es todos los días el caso puede simplemente;

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 

Sólo llamada (o bucle hasta vacío) file = Dir$() para obtener el siguiente partido.

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

O puede utilizar expresiones regulares

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

por alguna razón, estaba asumiendo que el archivo estaba abierto. Uy – Glennular

2

Hay un Application.FileSearch puede utilizar (véase más adelante). Puede usar eso para buscar los archivos que coincidan con su patrón. Esta información es tomada desde 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

Estaba intentando esta pregunta como una función. Esta es la solución que terminó trabajando para mí.

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 

Esto funciona para mí como una función única o de matriz.

0

Si sabe que ningún otro archivo contiene "nombre de archivo" y "ESY" en ese orden a continuación, sólo tiene que utilizar

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

O si se conoce el número de desaparecidos caracteres a continuación (suponiendo 4 caracteres desconocido)

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

que utiliza este método para ejecutar código en archivos que son & fecha sellos de tiempo de ignorar la parte de marca de tiempo.

Cuestiones relacionadas