2010-05-18 4 views

Répondre

13

filename*esy est déjà un caractère générique « shell prêt » & si c'est alway le cas, vous pouvez simplement;

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 

appel Just (ou boucle jusqu'à vide) file = Dir$() pour obtenir le prochain match.

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

Ou vous pouvez utiliser RegEx

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

pour une raison quelconque, je supposais que le fichier était ouvert. Oops – Glennular

2

Il y a un Application.FileSearch vous pouvez utiliser (voir ci-dessous). Vous pouvez l'utiliser pour rechercher les fichiers qui correspondent à votre modèle. Cette information provient de 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

J'essayais cette question en tant que fonction. C'est la solution qui a fini par fonctionner pour moi.

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 

Cela fonctionne pour moi comme une seule fonction ou une fonction de tableau.

0

Si vous savez qu'aucun autre fichier contient « nom de fichier » et « esy » dans cet ordre, vous pouvez simplement utiliser

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

Ou si vous connaissez le nombre de caractères manquants alors (en supposant 4 caractères inconnus)

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

J'utilise cette méthode pour exécuter du code sur les fichiers qui sont la date & horodatées d'ignorer la partie d'horodatage.

Questions connexes