2016-10-22 5 views
0

매크로을 사용하여 Excel에서 시도했지만 정확한 요구 사항을 얻을 수 없습니다.Excel에서 폴더 이름을 얻는 방법은 무엇입니까?

예 : category는 폴더 이름입니다. 이 범주의 내부에서 나는이 AAA Excel에서을 EEE 갈 수있는 방법 AAA BBB CCC DDD EEE

같은 많은 폴더가 있습니다.

+1

이 경우 Dir()을 사용할 수 있습니다. –

+0

폴더를 건너 뛴 경우 어떻게됩니까? 'AAA','BBB','DDD','EEE'? –

답변

0

이 코드는 예를 들어, C (셀 A1에 정의 된 경로 내의 모든 폴더의 이름을 얻을 것이다 :) 및 열 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, 당신은을 반환하는 새로운 수식을 만들 수 있습니다 합니다 (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

** Microsoft Scripting Runtime ** (** Tools -> References ... **)에 대한 참조를 추가 한 다음 '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 : 쉼표는 폴더와 구분 된 목록 그의 범위를 제대로 처리합니다.

SubFolders가 알파벳 순서로 폴더를 반환한다고 가정하지 않습니다. (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 
관련 문제