2016-10-22 2 views
0

J'ai essayé dans Excel en utilisant macro mais je n'ai pas pu obtenir ma condition exacte.Comment obtenir le nom des dossiers dans Excel?

Par exemple: catégorie est le nom du dossier. A l'intérieur de cette catégorie, j'ai beaucoup de dossiers comme AAA BBB CCC DDD EEE

Comment obtenir ce AAA à eee dans Excel.

+1

Vous pouvez utiliser Dir() pour cela. –

+0

Que se passe-t-il si vous avez ignoré des dossiers - par ex. «AAA», «BBB», «DDD», «EEE»? –

Répondre

0

Ce code obtenir le nom de chaque dossier dans le chemin défini dans la cellule A1 (par exemple C :) et les mettre dans la colonne B:

Sub GetChildFolders() 
    Dim fso, categoryFolder, subFolder As Object 
    Dim i As Integer 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set categoryFolder = fso.GetFolder(Cells(1, 1).Value) 
    i = 1 
    For Each subFolder In categoryFolder.subfolders 
    Cells(i, 2) = subFolder.Name 
    i = i + 1 
    Next subFolder 
End Sub 

Alterantively, vous pouvez créer une nouvelle formule qui renvoie un séparés par des virgules liste des dossiers: (Pour créer une nouvelle formule, ajouter un nouveau module de de le menu insertion dans la fenêtre de la VBA)

Function GetChildFoldersList(ByVal path As String) 
    Dim fso, categoryFolder, subFolder As Object 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set categoryFolder = fso.GetFolder(path) 
    For Each subFolder In categoryFolder.subfolders 
    GetChildFoldersList = GetChildFoldersList + subFolder.Name + ", " 
    Next subFolder 
    If GetChildFoldersList > 0 Then 
    GetChildFoldersList = Left(GetChildFoldersList, Len(GetChildFoldersList) - 2) 
    Else 
    GetChildFoldersList = "Folder is Empty!" 
    End If 
End Function 
+0

Vous pouvez ajouter une référence à ** Microsoft Scripting Runtime ** (** Outils -> Références ... **), puis écrire «Dim fso As New Scripting.FileSystemObject». –

+0

Notez que 'fso' et' categoryFolder' sont tapés comme 'Variant'. Pour qu'ils soient typés comme 'Object', vous devez répéter' As Object' pour chaque variable: 'Dim fso As Object, categoryFolder As Object, sous-dossier As Object'. –

0

T il gère correctement la gamme.

Il ne suppose pas que SubFolders renvoie les dossiers dans l'ordre alphabétique. (Il n'y a aucune mention d'une telle chose dans le documentation).

'Add a reference to 'Microsoft Scripting Runtime' (Tools -> References...) 
Function ChildFolders(path As String) As String 
    Dim fso As New Scripting.FileSystemObject 
    Dim fldr As Scripting.Folder 
    Set fldr = fso.GetFolder(path) 
    Dim minFolder As String, maxFolder As String 
    minFolder = "" 
    maxFolder = "" 
    Dim x As folder 
    For Each x In fldr.SubFolders 
     If x.Name < minFolder Or minFolder = "" Then 
      minFolder = x.Name 
     ElseIf x.Name > maxFolder Then 
      maxFolder = x.Name 
     End If 
    Next 

    Select Case True 
    Case minFolder = "" And maxFolder = "" 
     ChildFolders = "(No folders)" 
    Case maxFolder = "" 
     ChildFolders = minFolder 
    Case Else 
     ChildFolders = minFolder & " to " & maxFolder 
    End Select 
End Function