|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.07.2015, 20:16 | #1 |
Пользователь
Регистрация: 18.01.2011
Сообщений: 75
|
HELP!!! Macros на объединение csv файлов в один
Доброго времени суток.
есть куча файлов, формат файлов csv. для каждого файла есть свой лист в книге куда он должен быть помещен. конечно, есть решение простое, открывать каждый файл, копировать всю информацию, находить нужный мне лист, и вставлять. далеко не программист, но вот такое получилось. на форумах что-то нашел, плюс посмотрел код когда записал макрос сводный файл находится с текущими csv файлами почему-то выдает ошибку, что файл не найдет или удален. если можно как-то упростить или отпимизировать работу маскроса, подскажите. для начала бы разобраться, чтоб он заработал а то может я не там его создал или еще что. Код Sub macro_for_copy_paste() ' ' Macro_for_copy_paste Macro ' my_file = ActiveWorkbook.Name CuDir = ActiveWorkbook.Path ChDir CuDir ''' Workbooks.Open Filename:= _ Dir(CuDir + "\PH1_New_Colocation_DPR_NEW_*.csv" ): ''''' какой файл открыть нужно Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy CSVfilename = ActiveWorkbook.Name Windows(my_file).Activate Sheets("PH1_Colocation_DPR").Select : ''''' в какой лист нужно вставить скопированное ActiveWindow.Panes(1).Activate Range("A1").Select ActiveSheet.Paste Windows(CSVfilename).Activate Range("A1").Select Selection.Copy ActiveWindow.Close Windows(my_file).Activate ''' Workbooks.Open Filename:= _ Dir(CuDir + "\PH1_FTK_DPR_NEW_*.csv"): ''''' óêàçûâàþ êàêîé ôàéë íóæíî îòêðûòü. Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy CSVfilename = ActiveWorkbook.Name Windows(my_file).Activate Sheets("PH1_FTK_DPR").Select: ''''' ActiveWindow.Panes(1).Activate Range("A1").Select ActiveSheet.Paste Windows(CSVfilename).Activate Range("A1").Select Selection.Copy ActiveWindow.Close Windows(my_file).Activate ''' и так аналогично для 10 других файликов ' End Sub |
25.07.2015, 20:58 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
в вашем макросе много лишнего (select и activate)
и вообще, его проще переписать с нуля посмотрите аналогичный макрос, - можете его взять за основу http://excelvba.ru/code/CombineFiles |
25.07.2015, 21:00 | #3 | |
Пользователь
Регистрация: 18.01.2011
Сообщений: 75
|
Цитата:
могу только с Вами согласиться, но к сожалению, не знаю как это сделать (. то что смог, так сказать, раздобыть и пытался в нем разобраться |
|
25.07.2015, 21:07 | #4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
запишите еще 9 правильных имен файлов и названий листов,
уберите комментарии и выполните, помолясь... Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 25.07.2015 в 21:09. |
25.07.2015, 22:00 | #5 |
Пользователь
Регистрация: 18.01.2011
Сообщений: 75
|
УВ. ИГОРЬ
СПАСИБО ОГРОМНОЕ! ВСЕ РАБОТАЕТ ЧЕТКО И ПРАВИЛЬНО! |
26.07.2015, 09:03 | #6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
макрос можно сделать таким
Код:
1. в исходном файле ЕСТЬ дополнительный лист, он 1-й в списке листов книги 2. 1-я колонка 1-го листа содержит список имен файлов, начиная с ячейки А1 3. на 1-м листе могут быть заполненны только колонка 1 и 2 (А, В) лист не должен содержать БОЛЬШЕ НИ КАКИХ ДАННЫХ 4. перечень листов в книге, начиная с 2-го, соответсвует списку имен файлов на первом листе (листы могут иметь произвольные названия) 5. в случае если листов в книге меньше, чем файлов в списке, или файла нет в папке с программой (имя файла написано с ошибкой), в колонке 2 1-го листа будет соотв. сообщение об ошибке таким образом Вы сможете управлять работой макроса, добавляя (удаляя) строки с именами файлов на 1-й лист. после работы макроса на 1-ом листе в колонку В напротив имен файлов будут записаны названия листов, в который были скопированы данные из указанного файла, т.е. 1-й лист выполняет роль источника списка файлов и отчета о проделанной работе
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
26.07.2015, 11:07 | #7 |
Пользователь
Регистрация: 18.01.2011
Сообщений: 75
|
Игорь,
спасибо Вам огромное!!! сегодня буду разбираться с новым макросом я пока не нарадуюсь первой версией. |
26.07.2015, 11:29 | #8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
и Вам спасибо!
понятно, вариант 2 - чисто на логике задачи) не представляя тонкостей а) если изменились названия файлов б) если изменилось их количество (2 файла, 7, 10, 121... теперь не важно) в) для изменения списка файлов (количества файлов) - не нужно открывать макрос и переписывать переменные с потонциальной возможностью "поправить" сам макрос до не рабочего состояния г) в конце-концов вариант 2 на падает по ошибке, если имя файла написано с ошибкой, а сообщает, что такого нет в папке
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 26.07.2015 в 11:39. |
26.07.2015, 18:58 | #9 |
Пользователь
Регистрация: 18.01.2011
Сообщений: 75
|
Остановлюсь пока на первом варианте. второй проверил, тоже работает четко! для этого случая нашел макрос, который выдает имена файлов в папке, потом главное сортировку сделать, чтобы первый файл был правильным для 2-го листа
спасибо еще раз! у меня 17 файликов, теперь меньше минуты нужно чтобы скопировать из них всю информацию в один файл |
01.08.2015, 20:03 | #10 | |
Пользователь
Регистрация: 18.01.2011
Сообщений: 75
|
Цитата:
как вставить скопированные данные в текущую книгу Код:
пробовал так Код:
Последний раз редактировалось sanych_09; 01.08.2015 в 20:18. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
объединение нескольких файлов в один | Pavelasd | Microsoft Office Excel | 1 | 01.05.2014 16:08 |
Объединение однотипных csv файлов | myosotis | Microsoft Office Excel | 4 | 29.01.2013 23:23 |
Объединение двух файлов в один | kitty19 | Общие вопросы C/C++ | 4 | 15.12.2010 15:51 |
Объединение данных из разных файлов на один лист | Комо | Microsoft Office Excel | 11 | 22.06.2010 21:26 |
Macros -- данные из csv файла надо вставить в Excel | sasha7676 | Microsoft Office Excel | 0 | 28.04.2010 19:14 |