2010-07-30 4 views
6

J'ai besoin d'écrire une macro dans VBA qui va ouvrir tous les fichiers dans un répertoire donné un par un et exécuter une macro sur eux.comment puis-je ouvrir TOUS les fichiers Excel un par un et exécuter une macro

Jusqu'à présent, j'ai quelque chose comme

for i = 1 to number_of_files 
    open Dir("C:\yourPath\*.*", vbNormal) 
    call some_macro 
    close file 
next i 
+3

Avez-vous commencé? Quel code avez-vous jusqu'ici? La macro réside-t-elle dans chaque classeur ou essayez-vous d'exécuter une macro dans un classeur par rapport à d'autres? – Jay

+0

la macro est seulement dans le classeur ONE –

Répondre

11

En appelant la fonction Dir() avec un filtre approprié, tel que "c:\folder\*.xls", vous commencez l'énumération et obtenir le premier nom de fichier.
Ensuite, en appelant à plusieurs reprises la fonction Dir() sans aucun paramètre, vous obtiendrez tous les noms de fichier *.xls, un pour chaque appel.

Vous ouvrez un classeur en appelant Workbooks.Open(full_path). Cela vous donne un objet Workbook, contre lequel vous pouvez exécuter une macro.

La méthode .Close() de cet objet Workbook ferme le classeur. Vous pouvez utiliser .Close(SaveChanges:=True) pour enregistrer les modifications, .Close(SaveChanges:=False) pour annuler les modifications ou omettre le paramètre pour que l'utilisateur décide.

+0

comment ferais-je pour fermer le fichier? –

+1

En appelant '.Close()'. – GSerg

-2

Voici la façon dont l'objet VBA facile de le faire:

Dim fs As FileSearch 
Dim i As Integer 
Dim wbk As Workbook 

Set fs = Application.FileSearch 

With fs 
    .LookIn = ThisWorkbook.Path 
    .FileName = "*.xls" 
    For i = 1 to .Execute() 
     Set wbk = Workbooks.Open(.FoundFiles(i)) 
     ''//RUN MACRO HERE 
     wbk.Close(SaveChanges:=True) 
    Next i 
End With 
+2

Cela ne fonctionne que pour Excel 2003 et ci-dessous. – Patrick

Questions connexes