2014-04-25 4 views
0

J'utilise le code suivant pour lire les noms de fichiers dans une feuille Excel, mais j'aimerais inclure des sous-dossiers et capturer le chemin complet du fichier. J'ai essayé quelques petites choses mais aucune n'a fonctionné. J'ai bricolé cela ensemble à partir de morceaux de code d'autres personnes édités pour fonctionner dans ma situation, malheureusement cela signifie que ma compréhension n'est pas aussi approfondie qu'elle devrait l'être.Lecture des chemins de fichier à partir de dossiers et de sous-dossiers dans Excel

Les fichiers sont des fichiers audio (WAV ou MP3), le reste de la feuille de calcul contiendra des métadonnées qui seront utilisés pour marquer les fichiers: artiste, titre, album, etc.

Option Explicit 
Sub GetFileNames() 
Dim xRow As Long 
Dim xDirect$, xFname$, InitialFoldr$ 
InitialFoldr$ = "C:\" 

With Application.FileDialog(msoFileDialogFolderPicker) 
.InitialFileName = Application.DefaultFilePath & "\" 
.Title = "Please select the folder to list audio files from" 
.InitialFileName = InitialFoldr$ 
.Show 

    If .SelectedItems.Count <> 0 Then 
    xDirect$ = .SelectedItems(1) & "\" 
    xFname$ = Dir(xDirect$, 7) 
    Do While xFname$ <> "" 
    Worksheets("Metadata").Activate 
    ActiveSheet.Range("A2").Select 
    ActiveCell.Offset(xRow) = xFname$ 
    xRow = xRow + 1 
    xFname$ = Dir 
    Loop 

    Dim x& 
    With Application 
      .ScreenUpdating = False 
      Rows.Hidden = False 
      Rows.Hidden = True 
     For x = 1 To Rows.Count 
      If .WorksheetFunction.CountA(Rows(x)) > 0 Then Rows(x).Hidden = False 
     Next x 
     .ScreenUpdating = False 
    End With 

    Worksheets("Metadata").Visible = True 
    Worksheets("Menu").Visible = False 

End If 
End With 
End Sub 

Je suis très nouveau à VBA mais je commence à saisir une partie de celui-ci.

Répondre

0

Ce code va extraire tous les mp3 d'un dossier et tous ses sous-dossiers. Bonne chance avec la VBA!

Public Sub FindFiles() 
'you must add a reference to 'Microsoft Shell Controls And Automation' 

Dim shl As Shell32.Shell 
Dim fol As Shell32.Folder 
Dim row As Long 

Set shl = New Shell32.Shell 
Set fol = shl.Namespace("E:\CDs\") 
row = 1 

ProcessFolderRecursively fol, row 

End Sub 

Private Sub ProcessFolderRecursively(fol As Shell32.Folder, ByRef row As Long) 

Dim item As Shell32.FolderItem 
Dim fol2 As Shell32.Folder 

If Not fol Is Nothing Then 
    For Each item In fol.Items 
     If item.IsFolder Then 
      Set fol2 = item.GetFolder 
      ProcessFolderRecursively fol2, row 
     Else 
      'you might need to edit the criterion here 
      If item.Type = "MP3 Format Sound" Then 
       Cells(row, 1) = item.Path 
       row = row + 1 
      End If 
     End If 
    Next 
End If 

End Sub 
+0

Merci, mais je ne veux pas trouver que mp3s, il a besoin de me montrer tout dans les dossiers, il pourrait être un mélange de MP3s, WAVs, aiffs, etc etc. Il WMAs fonctionne parfaitement comme il est Pour le dossier racine et les noms de fichiers, je veux juste qu'il soit légèrement plus flexible en regardant dans les sous-dossiers et en retournant les chemins de fichiers plutôt que les noms. Je peux toujours couper les chemins si je trouve que j'ai seulement besoin de noms de fichiers. – user3506327

+0

Il suffit de supprimer la ligne 'If item.Type = ...' et la fin correspondante If ci-dessous et il va extraire tous les fichiers dans tous les sous-dossiers – steveo40

+0

Si cela répond à votre question, pourriez-vous s'il vous plaît marquer comme réponse. Merci – steveo40

Questions connexes