mail mail

Надстройка для загрузки списка файлов на лист Excel

Скриншот формы поиска файлов в заданной папке

Надстройка, позволяющая загрузить из выбранной папки список файлов на лист Excel.

Автор: VictorM

Особенности надстройки:

  • задаваемая пользователем глубина поиска в подпапках
  • простановка гиперссылок на листе Excel на найденные файлы
  • вывод дополнительных характеристик файла
  • (размер файла, дата создания файла, полный путь)
  • изменяемая маска поиска (поиск по части имени файла, по расширению, и т.д.)
  • вывод результатов поиска на отдельный лист

 

Основой для надстройки загрузки списка файлов послужила функция FilenamesCollection

Вы также можете посмотреть другие примеры загрузки списка файлов на лист Excel 

 

Для запуска главной формы надстройки запустите прикреплённый к статье файл,
и нажмите в Excel комбинацию клавиш Ctrl + Alt + S

Далее, выберите папку, в которой будет производиться поиск файлов,
задайте маску поиска (если маска не задана, в результат будут выведены все файлы в папке),
и укажите глубину поиска в подпапках (если глубина = 0, производится поиск во всех вложенных подпапках)

ВложениеРазмер
FilenamesList.xla73 КБ

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Раньше все работало, но после серии добавлений разных модулей и форм стала появляться ошибка

Вообще-то типичное положение вещей. Возникнуть оно может из-за неоднозначных имен процедур и функций.
Просто из-за того, что добавляя модули и формы из разных проектов, надстроек могут продублироваться эти самые имена.
В частности, у меня была такая ситуация, когда я делал собственную надстройку из "кусков" кодов и надстроек автора сайта.
Настоятельно рекомендуется, при таком вот добавлении, каждый раз запускать Debug - Compile VBAProject.

В некоторых случаях требуется отобразить листа файла надстройки перед копированием.
(временно установить свойство IsAddin в FALSE)

И вообще, кому это надо - мне, или вам?
Если вам - то почему экономите слова (даже не говоря номер и описание ошибки)?
Мне надоело играть в телепата, и строить предположения, не видя файла.
Обращайтесь на форумы по Excel, выкладывайте там свою надстройку, - спецы помогут разобраться в причинах.

Один в один сделано. Тишина...

А лист СПИСОК, который вы пытаетесь скопировать из надстройки, он точно видимый?

Убедитесь, что лист видимый, задайте ему кодовое имя (выделено на скриншоте), и пробуйте упрощённый макрос:

Sub Скопировать_Лист_Список()
    On Error Resume Next    ' на случай, если ни одна книга не открыта
   spisok.Copy Worksheets(Worksheets.Count)
End Sub

Засада...
Не работает решение...нет даже ошибок и лист не появляется. Название листа и макроса точны.

Эх, много лишнего у вас в коде...

Попробуйте так - ошибка должна исчезнуть:

Sub Скопировать_Лист_Список()
    On Error Resume Next    ' на случай, если ни одна книга не открыта
   ThisWorkbook.Worksheets("Список").Copy _
            ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
End Sub

Обратите внимание - я использую Worksheets вместо Sheets

Можно ли вопрос не по теме...
У меня в моей надстройке есть листы, которые выводятся соответственно в любой книге. Раньше все работало, но после серии добавлений разных модулей и форм стала появляться ошибка и к сожалению я не могу "откатиться" назад, много прошло времени.
Макрос вызова листа у меня:
Sub Вывести_Лист_Список() ' Макрос кнопки в надстройке
Dim wbFrom As Workbook
Set wbFrom = Workbooks("НАЗВАНИЕ_НАДСТРОЙКИ.xlam")

Dim wbTo As Workbook
Set wbTo = ActiveWorkbook

Dim n As Integer
n = wbTo.Sheets.Count

wbFrom.Sheets("НАЗВАНИЕ-ЛИСТА").Copy After:=wbTo.Sheets(n)

Set wbFrom = Nothing
Set wbTo = Nothing
End Sub

Ошибка на : wbFrom.Sheets("НАЗВАНИЕ-ЛИСТА").Copy After:=wbTo.Sheets(n)

Есть ли решение ?
Может есть другие способы вызова листа.

Браво Маэстро...!
Все заработало. Спасибо.

Значит, где-то в глубинах вашего файла есть глобальная переменная путь или PS, определённая с типом Object, Range или т.п.

Решение - заменить названия переменных:

Private Sub cb_выбор_Click()
    FolderPath = ""
    PathSep = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "Выбрать"
        .Title = "Выберите папку"
        .InitialFileName = "c:\"
        If .Show = -1 Then FolderPath = .SelectedItems(1)
        If Not Right$(FolderPath, 1) = PathSep Then FolderPath = FolderPath & PathSep
    End With
    Me.tb_Путь.Value = FolderPath
End Sub

После этого всё должно заработать и в вашем файле.

PS: Отсюда вывод: глобальные переменные в большой программе - это зло, от них надо избавляться.

Если ничего и никуда не копировать, то в оригинале работает отлично...Не могу понять, как связана данная ошибка при переносе модуля и формы в другой файл...!?

Спасибо за реакцию на вопрос.
Еще раз повторюсь, я в свою надстройку скопировал Ваши модуль и форму. При запуске макроса в моей надстройке "ВызовФормы" появляется форма. При нажатии на выбор папки появляется ошибка (выше указал). Ошибка на второй строке в форме " ПУТЬ = "" "

Код выбора папки, в принципе, простейший, - таких ошибок выдавать не должен.
Ещё раз протестировал надстройку в Excel 2003 и 2007 - что только ей не задавал в качестве папки, и ну никак не смог получить ошибку.

Так что, скорее всего, вы что-то намудрили при копировании.
Хотя бы скажите, на какой строке кода вылетает ошибка (какая строка макроса подсвечивается желтым?)

Если не копировать ничего никуда, а просто запустить прикреплённый файл, - тоже вылетает ошибка?

PS: Я хоть и не автор надстройки, но участвовал в доработке формы

Уважаемый автор, я с удовольствием отслеживаю Ваши решения и собираю интересные решения в одну надстройку для себя. Вот и это решение "тупо" скопировал (модуль и форму) к себе, но при выборе папки выдает ошибку
Run-time error "424"
Object Required

Ничего не могу поделать...
Что не правильно ?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
14 + 1 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.