Страницы: 1
RSS
Копирование (сбор) данных из разных книг в одну, Сбор данных из множества книг в одну, при условии одинаковых листов.
 
Доброго времени суток. Задался вопросом о "сборе" данных из множества книг в одну. Во всех книгах имеется лист , на котором собираются данные ( в основном ссылки с дуругих листов в книге). Строки, столбцы, на этом листе, во всех книгах постоянны. Как сделать так, что бы из всех "выбранных" книг, копировались данные (срока с данными) в другую, общую книгу. То есть из каждой новой книги информация копировалась бы в последующую строку, в новой книги.Почитал довольно много тем с похожим вопросом. Заинтересовался кодом ниже. Но есть проблемы: копирует не те строки которые необходимо+такое ощущение, что проводит поиск файлов эксель по всему компу. В чем проблема/ошибка, подскажите пожалуйста.
Код
 Sub Собрать_данные()
      Application.ScreenUpdating = False
    ' Макрос собирает данные на активном листе активной книги из всех листов "Форма" xls файлов заданной директории,
    Dim ImenaListovSbora: ImenaListovSbora = Array("Сводный_лист")
    Const FirstRow_Cel& = 4          ' Номер строки начала построения
    Const FirstRow& = 4              ' Номер строки начала сбора данных (ниже шапки)
    Dim i&, LastRow&, LastRow_Cel&
    Dim ShCel As Worksheet, Sh As Worksheet, wb_Tek As Workbook
    Dim MyPath$, MyFileName$, MyFullName$
    Set ShCel = ActiveSheet
    LastRow_Cel = FirstRow_Cel
    With ShCel
        i = .UsedRange.Rows.Count + .UsedRange.Row - 1
        If i < FirstRow_Cel Then i = FirstRow_Cel
        .Rows(FirstRow_Cel & ":" & i).ClearContents
    End With
    MyPath = Trim$(ShCel.[C1])
    If Right$(MyPath, 1) <> "" Then MyPath = MyPath & ""
    MyFileName = Dir(MyPath & "*.xls*")
    Do Until MyFileName = ""
        MyFullName = MyPath & MyFileName
        Set wb_Tek = Workbooks.Open(Filename:=MyFullName, UpdateLinks:=0, ReadOnly:=True)
        For Each Sh In wb_Tek.Worksheets
            For i = 0 To UBound(ImenaListovSbora)
                If Sh.Name = ImenaListovSbora(i) Then
                    With Sh
                        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                        .Range(.Cells(FirstRow, 1), .Cells(LastRow, 8)).Copy
                        ShCel.Cells(LastRow_Cel, 1).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                        LastRow_Cel = LastRow_Cel + LastRow - FirstRow + 1
                    End With
                End If
            Next
        Next Sh
        wb_Tek.Close SaveChanges:=False
        MyFileName = Dir
    Loop
    With ShCel
        .Range(.Cells(LastRow_Cel - 1, 1), .Cells(LastRow_Cel - 1, 8)).Copy
        .Cells(LastRow_Cel, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
        .Cells(LastRow_Cel, 2).Select
    End With
End Sub
 
Здравствуйте
Цитата
rumpelshtitchen написал:
Как сделать так, что бы из всех "выбранных" книг,
Можно так
Код
Sub Test()
    Dim Files, filename As String
    Files = Get_FileNames
    For i = 1 To UBound(Files)
        filename = Files(i)
    Next
End Sub

Function Get_FileNames(Optional ByVal Title As String = "Выберите файл для обработки", _
                       Optional ByVal FilterDescription As String = "Файлы Excel", _
                       Optional ByVal FilterExtention As String = "*.xls*") As Variant
    Dim res()
    ReDim res(0)
    Get_FileNames = res
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        Count = .SelectedItems.Count
        ReDim res(Count)
        For i = 1 To Count
            res(i) = .SelectedItems.Item(i)
        Next
    End With
    Get_FileNames = res
End Function

Изменено: doober - 04.10.2022 18:20:50
Страницы: 1
Наверх