Excel VBA Макросы: Как записать полные имена всех файлов, которые находятся в папке, в vba-массив?

Автор Посетитель, 30 июля 2019, 15:13

Посетитель

Как записать полные имена всех файлов, которые находятся в папке, в vba-массив?
Нужно получить полные имена всех файлов, у которых расширение "xlsm".

Администратор

1. Вверху модуля вставьте эти строки:
Option Explicit
Option Compare Text
Option Base 1

2. Подключите библиотеку:
Tools - References... - Microsoft Scripting Runtime

3. Вместо vba-массива используется коллекция, т.к. код проще получается.
Заранее нам не известно, сколько файлов в папке, поэтому заранее не известно, сколько создать элементов в массиве и нужно создавать количество элементов заранее в большом количестве.
А затем нужно удалить пустые элементы.
В случае коллекции, такой сложности нет.

4. Это код для виндоуса, для мака нужно писать другой код.

5. В пункте 2 укажите полное имя папки, которую нужно просмотреть.

6. Вообще, можно не использовать коллекцию, а можно работать с файлами в пункте 4. Здесь вместо этого кода используйте ваш код:
FNs.Add item:=файл.Name
Но с коллекцией может быть удобнее в каких-то случаях.

Макрос
Sub Макрос()

    Dim fso As Scripting.FileSystemObject
    Dim папка As Scripting.Folder, файл As Scripting.File
    Dim FNs As Collection, i As Long
   
   
    '1. Создание объекта, который умеет работать с папками и файлами.
    Set fso = New FileSystemObject
   
    '2. Присваиваем имя папке, с которой надо работать.
    ' Здесь укажите полное имя папки. На конце слеш не нужно указывать.
    Set папка = fso.GetFolder("C:\Users\User\Desktop\Эксель-файлы")
   
    '3. Создание коллекции.
    Set FNs = New Collection
   
    '4. Запись в коллекцию полных имён файлов, которые находятся в указанной папке.
        ' Если эксель-файл открыт, то в папке будет скрытый файл, относящийся к этому файлу.
        ' Поэтому делается проверка, что файл не скрытый.
    For Each файл In папка.Files
        If (файл.Attributes And Hidden) = 0 Then
            If файл.Name Like "*.xlsm" Then
                FNs.Add item:=файл.Path
            End If
        End If
    Next файл
   
    '5. Здесь в коллекции будут полные имена файлов.
    ' Просмотреть полные имена можно так (полные имена записываются в View - Immediate Window).
    For i = 1 To FNs.Count
        Debug.Print FNs(i)
    Next i

End Sub
[свернуть]