Страницы: 1
RSS
Количество файлов в каталоге
 
Добрый день. Сразу, как принято, прошу прощения за, возможно, избитую тему. Вариаций много есть, но вот простого не нашел.  
 
Пишется программа, которая копирует из множества файлов данные в один.    
Чтобы не привязываться к конкретному количеству возможных файлов-источников, нужно определить количество файлов, лежащее в заданном текущем каталоге (ww = ActiveWorkbook.Path ' получаем путь, где лежит текущая книга и все остальные)  
Вопрос: каким кодом подсчитать в переменную zz количество файлов, лежащих в каталоге (переменная ww)  
 
Спасибо.
 
Почитайте в Справке про ф-ю Dir, там пример хороший есть.
 
{quote}{login=AAAAAAAmidi}{date=03.09.2010 10:51}{thema=Количество файлов в каталоге}{post}Добрый день. Сразу, как принято, прошу прощения за, возможно, избитую тему. Вариаций много есть, но вот простого не нашел.  
 
Пишется программа, которая копирует из множества файлов данные в один.    
Чтобы не привязываться к конкретному количеству возможных файлов-источников, нужно определить количество файлов, лежащее в заданном текущем каталоге (ww = ActiveWorkbook.Path ' получаем путь, где лежит текущая книга и все остальные)  
Вопрос: каким кодом подсчитать в переменную zz количество файлов, лежащих в каталоге (переменная ww)  
 
Спасибо.{/post}{/quote}  
 
 
 
чего их считать?  обрабатывайте пока не кончатся..
Живи и дай жить..
 
Оказывается, в справке 2007 примера нет :( <BR>Смотрите тут: http://www.planetaexcel.ru/forum.php?thread_id=16943 Пост Hugo от 14:05 и ниже.
 
{quote}{login=Казанский}{date=03.09.2010 11:02}{thema=AAAAAAAmidi}{post}Оказывается, в справке 2007 примера нет :( <BR>Смотрите тут: http://www.planetaexcel.ru/forum.php?thread_id=16943 Пост Hugo от 14:05 и ниже.{/post}{/quote}  
 
Уже залез. Пример подправил под себя.  
=====================================  
   ww = ActiveWorkbook.Path '  
   ww1 = ww & "\"  
MyPath = ww1  
myname = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.  
Do While myname <> ""    ' Start the loop.  
   ' Ignore the current directory and the encompassing directory.  
   If myname <> "." And myname <> ".." Then  
       ' Use bitwise comparison to make sure MyName is a directory.  
       If (GetAttr(MyPath & myname) And vbDirectory) = vbDirectory Then  
           Debug.Print myname    ' Display entry only if it  
       End If    ' it represents a directory.  
   End If  
     
   myname = Dir    ' Get next entry.  
   zz = zz + 1  
Loop  
MsgBox zz  
=======================================  
Считает, но с одним ньюансом. Выдает количество файлов на 2 больше, чем есть в папке. Скрытых файлов вроде нет. Ищу причину.  
Ссылочку сейчас посмотрю. спасибо.
 
{quote}{login=The_Prist}{date=03.09.2010 11:14}{thema=}{post}Может подойдет .{/post}{/quote}  
 
Да, спасибо. Этот пример видел. Но у меня пользователи как бы сказать, не сильно продвинутые. Нужно скомандовать - свалите все файлы от менеджеров в одну папку, переименуйте по порядку (1,2,3... 44... ) а дальше программа все сделает сама.  
 
Раньше количество импортируемых файлов вбивалось конкретно через ячейку в книге-приемнике, хочу обойти это.
 
Чтоб не выдавало на 2 больше - перенесите zz сюда:  
If myname <> "." And myname <> ".." Then  
zz = zz + 1
 
Правильно Слэн говорит - чего их считать? Обрабатывать ВСЕ. И совсем необязательно переименовывать.
 
{quote}{login=Hugo}{date=03.09.2010 11:19}{thema=}{post}Чтоб не выдавало на 2 больше - перенесите zz сюда:  
If myname <> "." And myname <> ".." Then  
zz = zz + 1{/post}{/quote}  
 
Да, не разобрался с логикой.  
Все работает на ура. Спасибо.
 
{quote}{login=Юрий М}{date=03.09.2010 11:20}{thema=}{post}Правильно Слэн говорит - чего их считать? Обрабатывать ВСЕ. И совсем необязательно переименовывать.{/post}{/quote}  
 
Зная народ, накидают в папку что надо и не надо. Потом будут трезвонить - а чего он не туда считает))
 
Ещё можно на FSO сделать, с проверкой расширения и даты  
 
'Удаление файлов XLS если они старше 30 дней  
Dim FSO    
Dim TheFolder, TheFiles, AFile    
Set FSO = CreateObject("Scripting.FileSystemObject")    
Set TheFolder = FSO.GetFolder("C:\Temp\") 'Каталог, откуда удалять    
Set TheFiles = TheFolder.Files    
For Each AFile In TheFiles    
   If UCase(FSO.GetExtensionName(AFile.Path)) = "XLS" and _    
       DateDiff("d", AFile.DateLastModified, Date) > 30  Then    
       'AFile.Delete    
msgbox afile  
   End If    
Next
 
Поглядите пример здесь: http://excelvba.ru/code/FilenamesCollection <BR>получить кол-во файлов при использовании этой функции очень просто: <BR>zz = FilenamesCollection(ww, ".xls").count <BR>или zz = FilenamesCollection(ww).count
 
{quote}{login=Hugo}{date=03.09.2010 11:28}{thema=}{post}Ещё можно на FSO сделать, с проверкой расширения и даты  
 
{/post}{/quote}  
 
Ух, здорово. Проверил. Супер. Благодарю.
Страницы: 1
Читают тему
Наверх