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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.12.2007, 23:55   #1
Victor
Пользователь
 
Регистрация: 27.07.2007
Сообщений: 10
По умолчанию Перенос нескольких файлов посредством VBA

Доброго времени суток!
Передо мной стоит задача, которую никак не могу решить.
Суть заключается вот в чем:
Имеется папка, в которую скидываются некоторое количество файлов.
Необходимо раскидать файлы по папкам. Название каждого файла начинается на цифру, которая говорит о том в какую папку нужно скинуть файл.Оставшиеся файлы, название которых без цифр нужно скинуть в папку Misc.
Пример:
c:\income\0_cchk.day необходимо скинуть в c:\reports\0
c:\income\0_clch.d необходимо скинуть в c:\reports\0
c:\income\1_Bever.day необходимо скинуть в c:\reports\1
c:\income\1_clchk.d необходимо скинуть в c:\reports\1
c:\income\chckall.d необходимо скинуть в c:\reports\Misc
c:\income\fiscal.log необходимо скинуть в c:\reports\Misc

Ps: Проблема осложняется тем, что количество файлов всегда разное и название файлов иногда меняется.
Pps: Нужен код, очень нужен. А то приходится кучу времени на бестолковую работу тратить...
Victor вне форума
Старый 03.12.2007, 00:50   #2
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Код:
Private Sub MoveFiles() 'MS Excel 97, 2000, XP, 2003
    With Application.FileSearch
         .NewSearch
         .SearchSubFolders = False
         .LookIn = "C:\Income"
         .Execute
         For iCount& = 1 To .FoundFiles.Count
             iFullName$ = .FoundFiles(iCount&)
             iFileName$ = Dir(iFullName$) 'По необходимости
             'iFileName$ = Dir(iFullName$, vbArchive + vbHidden + vbReadOnly)
             If iFileName$ Like "#_*" Then
                Name iFullName$ As "C:\Reports\" & _
                Val(iFileName$) & "\" & iFileName$
             Else
                Name iFullName$ As "C:\Reports\Misc\" & iFileName$
             End If
         Next
    End With
End Sub
В данном примере предполагается, что :
- папка "C:\Income" существует, если есть вероятность обратного, то достаточно проверить её наличие, например, с помощью функции Dir(iPath, vbDirectory) <> ""
- папка "C:\Reports\" также существует, причём она содержит вложенные подпапки, как-то "Misc", "0", "1" и т.д. Наличие этой папки также можно предварительно проверить, а если необходимые, для копирования, подпапки могут отсутствовать, то их можно создать использовав инструкцию MkDir "C:\Reports\3"
- подпапки не должны содержать файлов с именами аналогичными копируемым, в противном случае, Вы получите ошибку, которую можно избежать, если перед перемещением проверить существование файлов и в случае их обнаружения - удалить их. Для этого можно использовать инструкцию Kill, пример
SetAttr "C:\Reports\1\MyFile.xls", vbNormal
Kill "C:\Reports\1\MyFile.xls"
pashulka вне форума
Старый 05.12.2007, 00:48   #3
Victor
Пользователь
 
Регистрация: 27.07.2007
Сообщений: 10
По умолчанию

Не получается
К сожалению, я не силен в VBA, знаю его только на уровне записи макросов и разбора команд которые он записывает из екселя.
Скорее всего я что-то не правильно делаю.
Пробовал вставить код в новый модуль, запуская его ничего не происходит. Причем даже если нет папок, то ошибки не выдает.
Пытался его повесить на кнопку в Excel, результат тот же...
Victor вне форума
Старый 05.12.2007, 07:34   #4
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Проверил, работает. Но, как говорится, на всякий случай, протестируйте его на домашней машине, посмотрите совпадает ли Ваша версия с указаными в макросе. Кроме того, пошаговое выполнение инструкций (в редакторе VBA) F8 также может быть не лишним.
pashulka вне форума
Старый 05.12.2007, 21:38   #5
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Виктор, Если Вы собираетесь перемещать не офисные файлы, то возможно имеет смысл воспользоваться необязательным свойством об'екта FileSearch, то бишь .FileType = msoFileTypeAllFiles (более подробно см.пример)
Вложения
Тип файла: zip Example_FileSearch.zip (15.6 Кб, 42 просмотров)
pashulka вне форума
Старый 09.12.2007, 23:25   #6
Victor
Пользователь
 
Регистрация: 27.07.2007
Сообщений: 10
По умолчанию

Огромное спасибо Павел!
Теперь все работает.
Victor вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать по одной ячейке из нескольких файлов в один Nimo Microsoft Office Excel 2 09.08.2008 09:25
открытие нескольких файлов valyan Общие вопросы Delphi 10 17.07.2008 20:27
Копирование нескольких файлов + ProgressBar AngelOfDeath Общие вопросы Delphi 4 28.05.2008 14:57
Как получить имена нескольких файлов выделенных в OpenDialog Comer_Jus Общие вопросы Delphi 2 26.05.2008 19:47