автоматическая подгрузка данных нескольких файлов в одну сводную

Автор Dimchiko, 21.06.2023, 09:58

« назад - далее »

Dimchiko

Коллеги. Помогите, пожалуйста, с решением данной задачи!

Суть в чем:
1) есть ряд смет (иногда более 30), которые находятся в папке с названием "сметы"
2) у каждой из смет - свое название
3) в каждой смете есть лист КП
4) в каждом листе КП есть один диапазон, данные из которых надо занести в общую сводную

И вопрос номер 2: можно ли из сводной таблицы переименовать сами файлы в папке "сметы"?

Serge 007

Здравствуйте

Цитата: Dimchiko от 21.06.2023, 09:58надо занести в общую сводную
Это можно сделать макросом

Цитата: Dimchiko от 21.06.2023, 09:58можно ли из сводной таблицы переименовать сами файлы в папке "сметы"?
Нет

Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Цитата: Serge 007 от 21.06.2023, 10:01Здравствуйте
Это можно сделать макросом
Я это понимаю, только в написании макросов, мягко говоря, не силен. Да и очень давно ничего не писал.
Можете помочь?

Цитата: Serge 007 от 21.06.2023, 10:01Нет
плохо, но хотя бы не важно

Serge 007

Цитата: Dimchiko от 21.06.2023, 10:06Можете помочь?
Помощь - это когда Вы код написали сами, но что-то в нем не получается, надо помочь исправить, доработать
В данном случае
Цитата: Dimchiko от 21.06.2023, 10:06в написании макросов, мягко говоря, не силен
, насколько я понимаю, Вам надо, что бы всю работу сделали за Вас (написать макрос с нуля)
Так?
 
 
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Цитата: Serge 007 от 21.06.2023, 10:16Помощь - это когда Вы код написали сами, но что-то в нем не получается, надо помочь исправить, доработать
В данном случае, насколько я понимаю, Вам надо, что бы всю работу сделали за Вас (написать макрос с нуля)
Так?
Даже, если макрос Вы мне напишете за деньги - это все равно будет помощь.

Serge 007

Речь не о деньгах :)
Макрос напишу бесплатно, постараюсь сегодня, в течении дня, но понадобятся некоторые уточнения
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Владимир .

Цитата: Serge 007 от 21.06.2023, 10:01можно ли из сводной таблицы переименовать сами файлы в папке "сметы"?
Нет

А Google другого мнения ...  ::)

Serge 007

Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Цитата: Serge 007 от 21.06.2023, 10:32Речь не о деньгах :)
Макрос напишу бесплатно, постараюсь сегодня, в течении дня, но понадобятся некоторые уточнения
Спасибо!
Я всегда на связи!

Serge 007

Файл из вложения поместите в папку со сметами и запустите макрос:
Sub CollectAllData()
Dim BazaWb As Workbook 'сводный файл
Dim BazaSht As Worksheet 'сводный лист
Dim iFileName$ 'имя каждой сметы (по очереди)
Dim iPath$ 'путь к папке, где лежат все сметы
Dim iLRBaza& 'последняя заполненная строка в сводном файле (в столбце A)
Dim iLRTempWb& 'последняя заполненная строка в каждой из смет (в столбце A)
Dim iNumFiles& 'количество смет
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .Calculation = xlManual
        Set BazaWb = ThisWorkbook
        Set BazaSht = BazaWb.Sheets("Итог")
        iPath = BazaWb.Path & "\"
        iFileName = Dir(iPath & "*.xlsx")
        Do While iFileName <> ""
            If iFileName <> BazaWb.Name Then
                With .Workbooks.Open _
                    (Filename:=iPath & iFileName, UpdateLinks:=False, ReadOnly:=True)
                    iNumFiles = iNumFiles + 1
                    With .Worksheets("КП")
                            iLRTempWb = .Cells(Rows.Count, 1).End(xlUp).Row 'последняя строка в смете
                            iLRBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row 'последняя строка в базе
                            BazaSht.Cells(iLRBaza + 1, 1) = iFileName
                         .Range(.Cells(1, 1), .Cells(iLRTempWb, 4)).Copy Destination:=BazaSht.Cells(iLRBaza + 2, 1)
'                           BazaSht.Cells(iLRBaza, 1).PasteSpecial Paste:=xlPasteValues
                    End With
                    .Close saveChanges:=False
                End With
            End If
            iFileName = Dir
        Loop
        .Calculation = xlAutomatic
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
    MsgBox "Данные собраны из " & iNumFiles & " смет", vbInformation, "Сбор данных смет окончен"
End Sub
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

#10
Спасибо за готовность помочь!
Я сделал, как Вы сказали, но макрос собрал только название смет....

Serge 007

Dimchiko, во первых не надо бессмысленно цитировать, во вторых - прежде чем выкладывать макрос, я протестировал его
Макрос, разумеется, рабочий и данные собирает исправно
Значит Вы что-то делаете неправильно
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Serge 007

Кстати, в топике, во вложении задача.rar, которое Вы прикрепили, все сметы - пустые
Если Вы тренировались на них, то макрос действительно вернет только названия смет, но это совсем не означает что макрос нерабочий, а только то, что из смет просто нечего в общий файл копировать
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

А! Прошу прощения, не понял сразу, что это зависит от того, что диапазон должен быть заполнен!
Сейчас посмотрю внимательнее!
СПАСИБО!!!

Dimchiko

ВЫ СУПЕР!!!!!!!!!!!!!!!!
Спасибо!!!
Все работает!
Буду золотить далее!))))
СПАСИБО!!!!!