Получаване на списък с файлове в папка и подпапки с помощта на VBA

VBA функция за получаване на списък с файлове от папка,
като се вземе предвид избраната дълбочина на търсене в подпапки

Пример във файл FilenamesCollection.xls показва списък с файлове на празен лист от нова книга (формира заглавия)

Пример във файл FilenamesCollectionEx.xls по-функционален - той, в допълнение към списъка с файлове от папката, показва размера на файла и датата на създаването му, а също така формира хипервръзки към файловете, намерени в клетките.

Списъкът се показва на стартовия лист, параметрите за търсене на файлове се задават в клетките на листа (вижте екранната снимка)

ЗАБЕЛЕЖКА: Ако показвате списък с имена на файлове с картинки (изображения) на лист, след това с помощта на тази добавка можете да вмъкнете самите снимки в клетките на съседната колона (или в бележките към тези клетки)

базирани на функции Имена на файлове Колекция,
както и начин за добавяне на стойности на клетки от намерени файлове към таблицата

'Пример за използване на функция в макрос:

Този код ви позволява да търсите желаните файлове в избраната папка (включително подпапки) и показва получения списък с файлове на лист от работна книга на Excel:

Друг случай на употреба:

PS: Можете да намерите подходящи имена на файлове в колекцията, като използвате следната функция:

Коментари

Благодаря, страхотен макрос

В отговор на:
Андрей, 15 март 2018 - 15:13 # 3
добър ден.
файл 148 знака (руски букви) не се обработва,
и самият файл на сървъра (ако файлът е на работния плот, тогава всичко работи)
каква е максималната дължина на името и възможно ли е да го заобиколите.

Ограничението за пълното име на файла, включително разширението, е 259 знака. Съответно всички файлове с по-дълго име при изпълнение
Задайте curfold = FSO.GetFolder (FolderPath)
ще бъдат игнорирани. Тествано на EX2010, W7 и MSServer 2008. От 28 файла (curfold.Count) само 15 са в действителност в колекцията (curfold.items (1). Curfold.items (15))

И как да направя макрос, така че да ми показва само празни папки?

Няма ограничения за дължината на името на файла (поне в продължение на много години на използване на този код на хиляди компютри, не съм срещал никакви проблеми)

добър ден.
файл 148 знака (руски букви) не се обработва,
и самият файл на сървъра (ако файлът е на работния плот, тогава всичко работи)
каква е максималната дължина на името и възможно ли е да го заобиколите.

Адаптиран за достъп - всичко работи, благодаря, помогна много

Ринат, вижте макроса за обработка на файлове от папка.
Там се показва диалогов прозорец с папка и всички файлове в него се обработват (независимо от имената на файловете)

добър ден!
Такъв въпрос, в отдела всеки месец служител поддържа отчет за работата си в табличен вид във файл на Excel, всеки в своя файл и шефовете трябва да въведат тези отчети в обобщената си таблица за себе си, т.е.копират докладвайте данни от файловете на всеки служител в отделен файл. Създадох макрос, за да копирам данните от файловете на всеки служител във файловата таблица за шефовете, като посочих пътя към всеки файл. Но в същото време възникват определени неудобства, всеки месец трябва да пререгистрирате пътищата към файловете, тъй като следващия месец се създават нови файлове според отчетите и пътищата към тях трябва да се актуализират. Моля, кажете ми как можете да го направите, така че пътищата до файловете да не са обвързани с конкретно местоположение на файла, но например като посочите месеца и годината, можете да генерирате един отчет за определен месец. Благодаря предварително!

Да, можем да направим такъв макрос по поръчка.
Минималната стойност на поръчката е 1500 рубли.

добър ден
кажете ми дали е възможно да напиша макрос за следните цели
необходимо е имената на снимковите файлове да се поберат в клетката, която е маркирана, ако изберете няколко от тях, тогава всичко се добавя разделено със запетаи или запетая само името и разширението на файла
например как да вмъкнете снимка в клетка, но не е вмъкната снимка, а именно името

или например, въз основа на вашите FilenamesCollectionEx.xls, намери всички файлове на диска/папката, от които се нуждаете - щракнете върху файла и трябва да изберете клетката, където да въведете името на файла
Благодаря предварително

По някаква причина размерът на файла ми в байтове се показва напълно различно, понякога дори с отрицателна стойност.
Пример:
1. теглото на файла е 3 840 327 KB или 3,66 GB, а таблицата дава "-362 472 675"
2. тегло на файла 5 082 087 KB или 4,84 GB, таблицата дава "909 089 137"

Василий, да, можеш да добавиш.
Можете да видите примерен код тук:
http://excelvba.ru/code/MCI

Добър ден! Кажете ми дали е възможно да добавите колоните "продължителност" и "ширина на рамката", които са в тези файлове?

Здравей Елизабет.
Причините може да има няколко:
- проблемен файл или файл, до който нямате достъп (грешка 53 - файлът не е намерен)
- твърде дълго име на папка (много нива на влагане) и/или файл
- срив на файлова система
- грешка в макрос (нещо не е взето предвид в кода)

Не се предоставя техническа поддръжка за безплатни макроси
Ако сте готови да платите за помощ, обадете се по Skype, мога да се свържа с вашия компютър и да поправя всичко.

Игор, благодаря ти много за тази работа!

Използвах файла ви за класифициране на филми от няколко години, но по някаква причина той спря да работи преди няколко седмици. В това няма критичност, т.к. Поправих основното благодарение на дискусиите тук, но не разбирам и страшно се чудя защо се случва това. Може би това се дължи на активирането на офиса (беше по едно и също време)? Офис 10-ти.
В този файл имам 2 раздела, актуализирам списъка на 2-ри и след това копирам новите позиции на първия (натрупвам). Когато списъкът се опресни, след 60-70 позиции, макросът спира и отчита грешка при изпълнение на грешка 53 с препратка към реда CreationDate = FileDateTime (FilePath). Не става въпрос за файла, защото премахването му не помогна. Добавих към скрипта „On Error Resume Next“, списъкът се актуализира до края, но филмите в хипервръзката в 1-ви раздел „не могат да отворят посочения файл“ (те работят във 2-ри раздел), въпреки че файлът и макросите са еднакви, спрете да работите. Знаете ли каква може да е причината?

Олег, вижте това решение: Преименувайте файлове

Добър ден! Помощ при написването на макрос.
Задача: изберете снимка в отделна папка (по име на файл) от голяма купчина снимки (те са в една папка). Списък на необходимите снимки (по име на файл) в списък с електронни таблици на Excel. + в тази таблица е необходимо да отбележите кои снимки са избрани.

Благодаря предварително.
Олег.

Добавете на първия ред в макроса:

Грешка по време на изпълнение „52“:
Неправилно име или номер на файла

Грешка в реда
CreationDate = FileDateTime (път на файла)

Не се сблъсках с проблема
Моята функция не може да генерира грешка, тъй като деактивира съобщенията за грешка
Никога не съм срещал нещо подобно - функцията работи като част от моите програми на хиляди компютри.
Кой ред от МОЯ код извежда грешка?

Здравейте, всичко работи благодарение) Дава грешка само когато името на файла съдържа нестандартни символи, йероглифи там и други подобни. Можете ли да ми кажете как да го поправя?)

Макросът обработва папки с произволен брой файлове - и десетки хиляди файлове не са проблем (да не говорим за 200 файла)
Ако не работи, сте написали нещо грешно в кода.

Макросът не работи с голямо количество файлове . не обработва папка с 200 файла. Как да поправя?

Здравей Андрей.
С мрежовите пътеки (UNC) - всичко също работи.
Написах го така - и получих списък с файлове

Благодаря. Много полезна функция. Но, за съжаление, той не търси мрежови папки без буква на устройството:-(
Тоест, ако папката за търсене е посочена като "\\ NetComp1 \ dir1 \ dir2", тя няма да търси. И не винаги е възможно да се присвои писмо.
Можете ли да измислите нещо, което да работи с мрежови пътища?
С цялото уважение, Андрю.

Благодаря ви много, използвам го от няколко години, всичко работи чудесно,
НО:
бе открито неприятно свойство - търсенето в мрежови папки не работи, ако не е зададена буква на устройство. Тези. "\\ Network \ dir1 \ dir2" в началния път на търсенето не се търкаля:-(. Възможно ли е да "ощипвам" нещо, за да работи. Възможно ли е да започнете търсене от VBA скрипт в стандартен прозорец на Windows (какво се отваря, като щракнете върху „Win + F“). Мисля, че в много случаи това би било идеално.
С цялото уважение, Андрю.

Олег, трябва да провериш всичко внимателно. Беше създадена предварително папка с желаното име, правилно ли е посочен пътят до нея (пише ли се например „C: \“ с руската буква C), дали посочените редове са поставени на едно и също място в макроса и т.н.

Ако VBA даде команда, тя я изпълнява, това означава, че командата е била дадена на грешното място или някъде е допусната грешка.

Антон, благодаря ти много за отговора. Проверих, но при едновременно показване на списъка с файлове в листа, копиране в посочената папка, тези файлове, които се показват в този лист, не се появяват.

Олег, гледайте внимателно дадените примери. Всичко вече е там.

За да копирате файла, добавете следните редове към функцията GetAllFileNamesUsingFSO

sNewFileName = "C: \ copy folder \ Copy" & име на файла
FileCopy fil, sNewFileName 'копирайте файла

В този случай папката за копия на файлове вече трябва да бъде създадена.

Възможно ли е в този отворен лист на Excel да се присвои хипервръзка към намерения файл към всяко име на файл от списъка?

Моля, кажете ми как да направя намерените файлове да бъдат копирани в друга посочена папка?

Артем, замени линията

Моля, кажете ми как да направя търсенето да се извършва на устройството C:, а не на работния плот?

Много благодаря. Всичко работи много добре. Доставя се на хората креативно и точно. Основното е идеите и подходите, а ние самите сме детайлите. Късмет.

Здравей, Аланян.
За вашата задача макросът трябва да бъде финализиран - можем да го направим по поръчка.
Направете поръчка на уебсайта, прикачете примерни файлове и опишете подробно какво и как трябва да работи.

здравей кажи ми
Например има 10 файла, в името на които е написано името на компютъра, а в самия файл на 2-ри ред има същото име на компютъра.
Как можете да събирате имена на файлове в Excel в 1 колона или да събирате имена на компютри от 2 реда в колона в Excel. Помощ plis. пренапишете ръчно запушването при работа

Здравей Владимир.
Да, възможно е да добавите макрос.

Добър ден на ВСИЧКИ! Кажете ми дали е възможно да добавите макрос, така че при задаване на периода в „Списък с файлове в папката“ да се показват само файлове „по дата на създаване“. Благодаря.

Благодаря ви много утре ще се опитам да проверя по време на работа.

Роман, вашият макрос ще изглежда така:

Помогнете да коригирате макроса, като използвате вашата функция. моят макрос не работи в 2010 офис поради функцията Application.FileSearch. се опита да преработи не работи по някаква причина не намира нито един файл в папката. Същността на това е в папката D: \ eq \ in, няколко файла от тип PRTDSK.001 PRTDSK.002 и т.н., които трябва да бъдат обработени. Помогнете ми да преправя парче код, което да отговаря на вашата функция за търсене. Благодаря предварително.
Подгризач ()
С Application.FileSearch
.LookIn = "d: \ eq \ in"
.Име на файла = "*. *"
Ако .Execute ()> 0 Тогава
За a = 1 To FindFiles.Count
in_file = FindFiles.Item (a) ': out_file = Ляво (in_file, Len (in_file) - 8) & "1 \ sss.txt"
'in_file = Вляво (.Име на файла, 7) & Формат (a, "00 #")
out_file = .LookIn & "\ PRT" & Format (a, "00 #") & ".doc"
i = FileLen (in_file)
ReDim in_Array (i) като байт: ReDim out_Array (i) като байт

Отворете in_file за двоичен файл като # 1: Вземете # 1, 1, in_Array (): Затворете # 1

Dim io As Long: io = 1
За ii = 1 до i
Избор на регистър in_Array (ii)
Дело & H1B: ii = ii + 1
Избор на регистър in_Array (ii)
Калъф & HE, & HF, & H23, & H30 До & H37, & H3C До & H3E, & H40, & H45 До & H48, & H4D, & H4F, & H50, & H54
Калъф & H19, & H20, & H21, & H25, & H2D, & H2F, & H33, & H41, & H43, & H49, & H4A, & H4E, _
& H51 до & H53, & H55, & H57, & H61, & H6C, & H6B, & H70, & H77, & H78, & H74: ii = ii + 1
Калъф & H24, & H5C, & H4B, & H4C, & H59, & H5A, & H3F: ii = ii + 2
Дело & H5E: ii = ii + 3
Край на избора
Калъф & HE, & HF, & H11 До & H15, & H18, & H7F ', & HC
'Case & HC: out_Array (io) = 10: io = io + 1
'добавете разпознаване на 2 последователни 0D
Друг случай: out_Array (io) = in_Array (ii): io = io + 1
Край на избора
Следващата ii
ReDim Запазване out_Array (io)
Отворете out_file за двоичен файл # 1: Поставете # 1, 1, out_Array (): Затворете # 1
Следваща а
Край ако
Край с
Крайна под

ако трябва да бъдат изключени няколко разширения, тогава: