2016-11-21 7 views
0

J'ai des milliers de fichiers .csv avec des noms de fichiers spécifiques. Chaque fichier .csv comporte la première ligne en tant qu'en-tête et les lignes suivantes (généralement 20 lignes) en tant que données. J'ai besoin d'aide pour copier le nom de fichier de chaque fichier .csv dans la dernière colonne pour 20 lignes, et devrait parcourir tous les fichiers .csv dans le dossier.Utilisation d'Excel VBA pour faire défiler les fichiers .csv dans le dossier et copier le nom de fichier dans les cellules de la dernière colonne

Merci d'avance!

+1

Commencez ici: https://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba?rq=1 –

+0

Salut, j'ai vu le code boucle. http://stackoverflow.com/a/10380381/5750419 mais vous ne savez pas comment et où saisir les codes pour effectuer la copie du nom de fichier. – WindWaterWinter

Répondre

0

Cela devrait le faire. En fonction de ce que vous faites, vous voudrez peut-être le modifier, donc il ne sera pas ajouter le champ de nom de fichier s'il existe déjà. etc.

Public Sub UpdateFiles() 

    Dim fso 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Dim xl As New Excel.Application 
    Dim wb As New Excel.Workbook 
    Dim lastRow 
    Dim lastColumn 

    Dim folder 

    'Change this folder to the one you want. 
    Set folder = fso.getFolder("c:\notbackedup\") 

    'Uncomment to watch/debug code 
    'xl.Visible = True 

    For Each f In folder.Files 
     Debug.Print f.Name 
     If (f.Name Like "*.csv") Then 
      Set wb = xl.Workbooks.Open(f.Path) 
      lastRow = wb.Sheets(1).UsedRange.Rows.Count 
      lastColumn = wb.Sheets(1).UsedRange.Columns.Count 
      wb.Sheets(1).Range(ColumnLetter(lastColumn + 1) & "1").Value = "FileName" 
      wb.Sheets(1).Range(ColumnLetter(lastColumn + 1) & "2:" & ColumnLetter(lastColumn+1) & lastRow).Value = f.Name 
      wb.Save 
      wb.Close True 
     End If 
    Next 
    xl.Quit 


End Sub 
Function ColumnLetter(ByVal ColumnNumber As Long) As String 
    Dim n As Long 
    Dim c As Byte 
    Dim s As String 

    n = ColumnNumber 
    Do 
     c = ((n - 1) Mod 26) 
     s = Chr(c + 65) & s 
     n = (n - c) \ 26 
    Loop While n > 0 
    ColumnLetter = s 
End Function 
+0

Un bon Clint !!! –