Как записать полные имена всех файлов, которые находятся в папке, в 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
Спасибо. Всё в порядке.