Страницы: 1
RSS
Собрать данные из нескольких книг, которые лежат на сервере в разных папках
 
Добрый вечер! Возможно, подобная тема уже поднималась.

Задача: собрать данные из нескольких книг, которые лежат на сервере в разных папках (все они в папке "отчеты"). Книги могут быть названы абсолютно по разному.

Нужно пробежаться по всем папкам, просмотреть в них все книги, вытащить из книг именнованные диапазоны.
Это возможно, если файлы располагаются на сервере? Возможно кто-то подкинет пример кода.
Спасибо заранее.
Изменено: Oleg - 30.05.2018 21:10:12
 
Я так понимаю, что поиском Вы искали исключительно абсолютно готовое решение конкретно под свою задачу? Т.к. примеров по сбору данных не только в форуме, но и в сети куча.
Как собрать данные с нескольких листов или книг?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Готовый макрос для вашей задачи:
http://excelvba.ru/code/CombineFiles
 
The_Prist, EducatedFool, спасибо
 
The_Prist, по ссылке очень хороший макрос, но немножко не подходит под мою задачу. Он вставляет данные одни под другими. А нет ли, случайно, такого, чтобы выбрал указанный столбец из разных книг и вставил в столбцы нового листа?
Изменено: JuFi - 23.04.2013 00:39:53 (дополнение)
 
Нет универсальных макросов на все случаи жизни. Нужно писать под Вашу задачу.
 
Цитата
чтобы выбрал указанный столбец из разных книг и вставил в столбцы нового листа

JuFi, сомневаюсь, что вы найдёте готовое решение под свою задачу.
Много лет пишу макросы, - но ни разу никто ничего подобного не просил
(всем надо одно ниже другого вставлять)


PS: Можно сделать на базе предложенного мной макроса - там только одну строку поменять надо.

Вместо этого:
Код
  ' ==== переносим данные в наш файл (shb - кодовое имя листа, куда помещаем данные)
           shb.Range("a" & shb.Rows.Count).End(xlUp).Offset(1).Resize(, ra.Rows.Count).Value = _
            Application.WorksheetFunction.Transpose(ra.Value)
            ' ==== конец обработки данных из очередного файла


написать что-то типа такого:
Код
' ==== переносим данные в наш файл (shb - кодовое имя листа, куда помещаем данные)
shb.cells(shb.columns.Count).End(xltoleft).next.Resize(ra.Rows.Count, 1).Value = ra.columns(1).Value
' ==== конец обработки данных из очередного файла
 
The_Prist, EducatedFool
Добрый день, разбираюсь с вашими макросами. Можно ли сделать так, чтобы я выбирал только одну папку, а уже внутри нее есть другие папки, а уже в них лежат файлики. Мне нужно вытащить из всех файликов именнованные диапазоны.

Заранее спасибо.
 
Цитата
Можно ли сделать так, чтобы я выбирал только одну папку ...

Да, можно. делайте.
 
Только хотел написать, что разобрался, спасибо!  :)

Правда возникла другая проблема, по сети данные не собирает, например путь к папке такой:
\\smb\Пользователи\Иванов
Изменено: Oleg - 22.04.2013 08:39:35
 
Первый макрос, кстати, собирает данные по сети, но вот поиск в подпапках, к сожалению, не делает, разобраться не выходит, слишком много новой информации, никогда с подобными кодом не сталкивался.
 
Просмотреть все файлы в папке
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, спасибо.
Проблемка возникает, если я хочу просмотреть папки на самбе: \\Smb\IT Отдел\
Set objFolder = objFSO.GetFolder(sPath)
sPath=\\Smb\it >B45;\test\

Если подключить как сетевой дискс буквой, все работает ОК! Странно.
Изменено: Oleg - 24.04.2013 01:16:17
 
Добрый день, друзья! Подмогните, пожалуйста! Никак не разберусь... Скачал пример по ссылке EducatedFool, но под свое никак не удается "подпилить". У меня задания после обработки сохраняются в отдельные файлы. Все "сохраненки" по структуре совершенно одинаковые, но с разными данными. Помогите дописать: мне нужно, что бы в файл сбора данных в столбец "А" брались данные из задания из ячейки Е1 (дата), в столбец "В" - из ячейки В2 (клиент), в столбец "С" из ячейки Е33 (квадратура), в столбец D - из ячейки Е31 (з/п). Очень буду благодарен! К концу месяца считать руками зарплату длительно....
Изменено: evg_glaz - 07.10.2016 11:26:23
 
Приложение - не более 100 кБ. Раскидывать на разные сообщения - не вариант.
Чем проще пример (с соблюдение структуры), тем оперативнее помощь. Добавьте к предыдущему сообщению.
 
Жаль, что оставили мою проблемку без внимания...
 
Цитата
Скачал пример по ссылке EducatedFool, но под свое никак не удается "подпилить"
evg_glaz
В программе Sub LoadDataFromWorkbooks()
надо изменить строки, которые переносят данные (они у вас начинаются с ячейки В2)
Код
        Else    ' файл успешно открыт
            Set sh = WB.Worksheets(1)    ' будем брать данные с первого листа
            ' берем диапазон ячеек с ячейки A2 до последней заполненной в столбце A
            'Set ra = sh.Range(sh.Range("a2"), sh.Range("a" & sh.Rows.Count).End(xlUp)).Resize(, 10)
            Set ra = sh.Range(sh.Range("B2"), sh.Range("B" & sh.Rows.Count).End(xlUp)).Resize(, 4)
            ' ==== переносим данные в наш файл (shd - кодовое имя листа, куда помещаем данные)
            shd.Range("a" & shd.Rows.Count).End(xlUp).Offset(1).Resize(ra.Rows.Count, ra.Columns.Count).Value = ra.Value
            ' ==== конец обработки данных из очередного файла

            WB.Close False: DoEvents    ' закрываем обработанный файл без сохранения изменений
            pi.Log vbTab & "Файл успешно обработан."

        End If
Строка Set ra = sh.Range(sh.Range("B2"), sh.Range("B" & sh.Rows.Count).End(xlUp)).Resize(, 4)
переносит всю страницу, а вам надо только отдельные ячейки. Попробуйте изменить эту часть.
Страницы: 1
Наверх