Как получить имя папки в excel?
Я пробовал в Excel с помощью макроса, но я не смог получить точные требования.
Например: category – это имя папки. Внутри этой категории у меня есть много папок, таких как AAA BBB CCC DDD EEE
Как получить этот AAA для EEE в excel.
- VBA Прокрутите папку и подпапки, чтобы найти конкретный лист, затем скопируйте и вставьте определенные данные
- VBA Excel Сохранить новый файл как дату активного файла
- Использование VBA FileSystemObject, определенного файла Расширение файла
- Имя папки фильтра
- Открыть все файлы в подпапках
Этот код получит имя каждой папки внутри пути, определенного в ячейке 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
Альтернативно, вы можете создать новую формулу, которая возвращает список, разделенный запятыми, с папками: (Чтобы создать новую формулу, добавьте новый модуль из меню вставки в окне 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
Это правильно обрабатывает диапазон.
Он не предполагает, что SubFolders возвращает папки в алфавитном порядке. (В документации нет упоминания об этом).
'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