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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2017, 10:46   #1
Sims-2007
 
Регистрация: 11.12.2017
Сообщений: 5
По умолчанию Сбор данных из книг Exel из указанной сетевой папки.

О великие гуру Exel, обращаюсь к Вам за помощью!
Не откажите полному профану в Exel
Мучаюсь я вот с чем. Каждый месяц собираю с 450 точек заказы на внутренние нужды. Все это отдельными файлами Exel. Потом вручную все это собираю в единый файл.
Уже 2 недели ищу в интернете подходящий макрос, но, видимо, каждый макрос заточен под определенную задачу и ни один не работает корректно. Меняется только количество товара. Сам файл не меняется. Есть еще один нюанс. В файле есть ограничения и он защищен.
Помогите/посоветуйте, пожалуйста!
Пример файлов, которые приходится собирать я приложил.
Вложения
Тип файла: xlsx Шаблон заказ.xlsx (66.5 Кб, 13 просмотров)
Sims-2007 вне форума Ответить с цитированием
Старый 12.12.2017, 11:25   #2
ПаВлА
Пользователь
 
Регистрация: 20.11.2017
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Sims-2007 Посмотреть сообщение
О
Пример файлов, которые приходится собирать я приложил.
Это хорошо. Из чего собирать? Нужны ещё исходные файлы (2-х достаточно). Было бы лучше их поместить на Лист2 и 3. И уже на основе этих листов показать, как должен формироваться итоговый файл.
ПаВлА вне форума Ответить с цитированием
Старый 12.12.2017, 11:34   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Здесь бывали?
Там на сайте и надстройка есть, чисто за символическую плату
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 12.12.2017, 12:32   #4
Sims-2007
 
Регистрация: 11.12.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ПаВлА Посмотреть сообщение
Это хорошо. Из чего собирать? Нужны ещё исходные файлы (2-х достаточно). Было бы лучше их поместить на Лист2 и 3. И уже на основе этих листов показать, как должен формироваться итоговый файл.
Исходники приходят в точно таком же виде. Магазины заполняют свой столбец, указываю там количество товара в котором нуждаются.
Вложил пример на 2 и 3 страницы.
Вложения
Тип файла: xlsx Шаблон заказ.xlsx (161.5 Кб, 13 просмотров)
Sims-2007 вне форума Ответить с цитированием
Старый 12.12.2017, 12:34   #5
Sims-2007
 
Регистрация: 11.12.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Здесь бывали?
Там на сайте и надстройка есть, чисто за символическую плату
Бывал. Этот макрос у меня не срабатывает. Выдает ошибку(((
Sims-2007 вне форума Ответить с цитированием
Старый 14.12.2017, 12:58   #6
Sims-2007
 
Регистрация: 11.12.2017
Сообщений: 5
По умолчанию

Нашел макрос, который работает с моими книгами, но делает не то что мне надо. Он копирует и вставляет листы друг под другом, а мне нужно, что бы от в готовый шаблон подставлял заполненные столбцы из выбранных книг.
Есть строчки(товары), которые не меняются. Есть столбцы(магазины), которые на против товара ставят потребность. Есть 450 файлов от магазинов. В каждом файле заполнен 1 или 2 столбца. Я хочу, что бы выбрав эти 450 файлов, макрос копировал и подставлял именно заполненный столбец в шаблон. И желательно как то упростить процедуру т.к. выбрав 20 файлов ноут завис совсем.
Прикладываю Файл. Сводный - куда должны подставляться значения столбцов. Что делает макрос - то как отрабатывает макрос.
Так же прикладываю зам макрос.

Очень прошу о помощи! Без Вас с этим никак не справлюсь...



Код:
Option Explicit

Sub Consolidated_Range_of_Books_and_Sheets()
    Dim iBeginRange As Object, lCalc As Long, lCol As Long
    Dim oAwb As String, sCopyAddress As String, sSheetName As String
    Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Object, wsDataSheet As Object, bPolyBooks As Boolean, avFiles
    Dim wbAct As Workbook
    Dim bPasteValues As Boolean
    
    On Error Resume Next
    'Выбираем диапазон выборки с книг
    Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                                           "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                                           vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
    'для указания диапазона без диалогового окна:
    'Set iBeginRange = Range("A1:A10") 'диапазон указывается нужный
    'Если диапазон не выбран - завершаем процедуру
    If iBeginRange Is Nothing Then Exit Sub
    'Указываем имя листа
    'Допустимо указывать в имени листа символы подставки ? и *.
    'Если указать только * то данные будут собираться со всех листов
    sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр")
    'Если имя листа не указано - данные будут собраны со вех листов
    If sSheetName = "" Then sSheetName = "*"
    On Error GoTo 0
    'Запрос - вставлять на результирующий лист все данные
    'или только значения ячеек (без формул и форматов)
    bPasteValues = (MsgBox("Вставлять только значения?", vbQuestion + vbYesNo, "Excel-VBA") = vbYes)
    'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)
    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
    End With
    'создаем новый лист в книге для сбора
    Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
    'если нужно сделать сбор данных на новый лист книги с кодом
    'Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then
            Set wbAct = Workbooks.Open(Filename:=avFiles(li))
        Else
            Set wbAct = ThisWorkbook
        End If
        oAwb = wbAct.Name
        'цикл по листам
        For Each wsSh In wbAct.Sheets
            If wsSh.Name Like sSheetName Then
                'Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 'собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else 'собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'вставляем имя книги, с которой собраны данные
                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = oAwb
                    If bPasteValues Then 'если вставляем только значения
                        .Range(sCopyAddress).Copy
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues
                    Else
                        .Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                    End If
                End With
            End If
NEXT_:
        Next wsSh
        If bPolyBooks Then wbAct.Close False
    Next li
    With Application
        .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
    End With
End Sub
Вложения
Тип файла: zip Тесть№1.xlsx.zip (313.1 Кб, 15 просмотров)

Последний раз редактировалось Sims-2007; 15.12.2017 в 10:06.
Sims-2007 вне форума Ответить с цитированием
Старый 15.12.2017, 06:25   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если известны путь к файлам, их имена, имена листов в файлах, и если структура этих файлов не меняется, то почему бы не прописать в ячейках сводного файла соответствующие ссылки?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.12.2017, 10:08   #8
Sims-2007
 
Регистрация: 11.12.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если известны путь к файлам, их имена, имена листов в файлах, и если структура этих файлов не меняется, то почему бы не прописать в ячейках сводного файла соответствующие ссылки?
Очень долгая и кропотливая работа. Очень много файлов.
Но если с макросом не получится, придется прописывать ссылки.
Sims-2007 вне форума Ответить с цитированием
Старый 15.12.2017, 10:20   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно ссылки макросом и прописывать - один раз долго и кропотливо напишите макрос и всё.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сбор данных Exel Игорь Ермошин Microsoft Office Excel 4 12.09.2015 20:22
сбор данных с разных книг в одну Ledy1987 Microsoft Office Excel 26 20.04.2011 21:33
Сбор данных с разных книг и работа с ними budda999 Microsoft Office Excel 1 19.01.2011 18:37
Сбор данных с множества книг в одну по шаблонам Adeletto Microsoft Office Excel 3 11.06.2010 17:07
Сбор данных из разных книг 804040 Microsoft Office Excel 2 19.04.2010 15:33