2016-10-22 3 views
0

Я попытался в Excel, используя макрос, но я не смог получить точные требования.Как получить имя папки в excel?

Например: Категория - это имя папки. Внутри этой категории у меня есть много папок, как AAA BBB CCC DDD EEE

Как получить этот ААА EEE первенствует.

+1

Для этого вы можете использовать Dir(). –

+0

Что произойдет, если у вас есть пропущенные папки - например. 'AAA',' BBB', 'DDD',' EEE'? –

ответ

0

Этот код будет получить имя каждой папки внутри пути, определенного в ячейке A1 (например, C :) и поместить их в колонке 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, вы можете создать новую формулу, которая возвращает разделенный запятыми списка с папками: (Чтобы создать новую формулу, добавить новый модульиз вставки меню в окне УВЫ)

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

Вы можете добавить ссылку на ** Microsoft Scripting Runtime ** (** Инструменты -> Ссылки ... **), а затем написать 'Dim fso As New Scripting.FileSystemObject'. –

+0

Обратите внимание, что 'fso' и' categoryFolder' вводятся как 'Variant'. Чтобы их набирали как «Object», вам нужно повторить «As Object» для каждой переменной: «Dim fso As Object, categoryFolder As Object, subFolder As Object'. –

0

T он правильно управляет диапазоном.

Он не предполагает, что подпапки возвращают папки в алфавитном порядке. (Об этом не упоминается в 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 
Смежные вопросы