Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 00:33   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Вывести из коллекции самый "свежий" файл

Доброй ночи, уважаемые форумчане!
Есть код, который делает коллекцию файлов по указанному пути и выводит на лист реквизиты этих файлов. Вот кусок кода:
Код:
ПутьКПапке$ = "C:\Users\Vova\Dropbox\Checklists\"
   МаскаПоиска$ = "*_итоги.csv" 
   ГлубинаПоиска% = 3
   If ГлубинаПоиска% = 0 Then ГлубинаПоиска% = 999    ' без ограничения по глубине

    ' считываем в колекцию coll нужные имена файлов
   Set coll = FilenamesCollection(ПутьКПапке$, МаскаПоиска$, ГлубинаПоиска%)

    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' выводим результаты (список файлов, и их характеристик) на лист
   For i = 1 To coll.Count    ' перебираем все элементы коллекции, содержащей пути к файлам

        НомерФайла = i
        ПутьКФайлу = coll(i)
        ИмяФайла = Dir(ПутьКФайлу)
        ДатаСоздания = FileDateTime(ПутьКФайлу)
        РазмерФайла = FileLen(ПутьКФайлу)

        ' выводим на лист очередную строку
       Range("a" & Rows.Count).End(xlUp).Offset(1).Resize(, 5).Value = _
        Array(НомерФайла, ИмяФайла, ПутьКФайлу, ДатаСоздания, РазмерФайла)
Столкнулся с ситуацией, когда маску поиска задать можно только по расширению "*.csv", потому как таких файлов может быть множество, не обязательно с таким именем. А мне нужен один(любой) из них. Думал встроить проверку на последний по дате\времени создания, что-то типа такого:
Код:
Do While myName <> ""
      If f = "" Then f = myName Else If FileDateTime(myPath & myName) > FileDateTime(myPath & f) Then f = myName
        myName = Dir
    Loop
Или встроить процедуру создания коллекции, чтобы в нее добавлялся только один, первый из найденных файлов? Подскажите, как лучше.
Заранее спасибо!
strannick вне форума Ответить с цитированием
Старый 22.01.2013, 02:00   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
'в вашем коде найдете строку
 For Each fil In curfold.Files    ' перебираем все файлы в папке 
    
'И так получите дату изменения
'Зачем 2 раза перебирать
Дата = fil.DateLastAccessed
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 22.01.2013, 03:55   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Всё делается одной строкой кода:

Код:
filename$ = DIR("C:\Users\Vova\Dropbox\Checklists\*_итоги.csv")
EducatedFool вне форума Ответить с цитированием
Старый 28.01.2013, 03:23   #4
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Всё делается одной строкой кода:

Код:
filename$ = DIR("C:\Users\Vova\Dropbox\Checklists\*_итоги.csv")
Не, так не получится. Во-первых, путь к файлу такой
Код:
C:\Users\Vova\Dropbox\Checklists\"тут папка с неопределенным названием"\"и еще одна папка с неопределенным названием"\.
Поэтому в коде ПутьКПапке$ = "C:\Users\Vova\Dropbox\Checklists\" , а ГлубинаПоиска% = 3.
Маска поиска *_итоги.csv тоже не подходит, потому что название файла может быть абсолютно непредсказуемое заранее, только расширение csv. Причем их там может быть неопределенное количество (больше одного точно). Но, как уже писал, по этому пути C:\Users\Vova\Dropbox\Checklists\"т ут папка с неопределенным названием"\"и еще одна папка с неопределенным названием"\ надо взять ЛЮБОЙ файл (только один), который находится по этому пути с расширением csv, вывести его название в ячейку столбца, ну и превратить его в гиперссылку. Поэтому-то я и думал привязаться к выбору из всех файлов в этой папке "самого свежего", встроив в процедуру создания коллекции всех файлов проверку на "свежесть". Больше ничего в голову не пришло. Умом понимаю, что задача решается более простым способом, а сообразить никак.
strannick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Теория игр: игра "Самый умный" MitsuXa Помощь студентам 0 12.12.2010 22:06
Нужно поле "Загрузить файл" в "новости сайта" planetary Помощь студентам 1 24.06.2010 12:26
"You can not run Delphi ... " - свершился самый жуткий к0шмар... :( DomiNick Свободное общение 5 04.12.2009 19:59
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03