Сбор данных из разных файлов в один - VBA
Формулировка задачи:
Добрый день. Стоит задача собирать данные из нескольких файлов с одинаковой структурой в один, имеющий аналогичную структуру. Имена файлов имеют одинаковое правило - 2016_07_ОП_*наименование*, то есть год, месяц, ОП-название формы, далее идет наименование отдела. Собирать данные нужно с конкретного листа и вставлять в файл на лист, с таким же наименованием (именовать лист нужно автоматически). Так же в сборочный файл нужно добавить две колонки - Год и Месяц. Брать данные для их заполнения нужно из имен файлов, то есть в данном случае всем скопированным строкам нужно поставить год - 2016 и месяц - 07.
Есть вот такой макрос, найденный на этом форуме (Извините за неудобства. Вставляю со всеми отступами, но они почему-то пропадают):
Но этот макрос копирует все листы. Помогите, пожалуйста, его поправить под необходимый мне функционал. Спасибо.
Решение задачи: «Сбор данных из разных файлов в один»
textual
Листинг программы
Sub Собрать_данные_Бюджетов()
' Макрос собирает в новой книге данные из заданного листа xls файлов с нужным шаблоном имени выбранной папки.
Const ImyaListaSbora = "Бюджет расходов и платежей"
Const FirstRow_Cel& = 2 ' Номер строки начала построения
Const FirstRow& = 2 ' Номер строки начала сбора данных (ниже шапки)
Dim i&, j&, k&, LastRow&, Gog, Mes, Metka$, A
Dim ShCel As Worksheet, Sh As Worksheet, wb_Tek As Workbook
Dim MyPath$, MyFileName$, MyFullName$
k = FirstRow_Cel - 1
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Укажите рабочую папку": .Show
If .SelectedItems.Count = 0 Then Exit Sub
MyPath = .SelectedItems(1) & ""
End With
If Right$(MyPath, 1) <> "" Then MyPath = MyPath & ""
Set ShCel = ActiveWorkbook.Worksheets(ImyaListaSbora)
i = InStr(1, ActiveWorkbook.Name, ".xls", vbTextCompare)
If i > 0 Then Metka = Mid(ActiveWorkbook.Name, 9, i - 9)
'ShCel.Name = ImyaListaSbora
ShCel.UsedRange.Offset(FirstRow_Cel - 1, 0).Clear
MyFileName = Dir(MyPath & "????_??_*_*.xls*")
Do Until MyFileName = ""
Gog = Left(MyFileName, 4)
Mes = Mid(MyFileName, 6, 2)
MyFullName = MyPath & MyFileName
Set wb_Tek = Workbooks.Open(FileName:=MyFullName, UpdateLinks:=0, ReadOnly:=True)
With wb_Tek.Worksheets(ImyaListaSbora)
.AutoFilterMode = False
LastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
A = Range(.Cells(FirstRow, 1), .Cells(LastRow, 11)).FormulaR1C1
For i = 1 To UBound(A)
If A(i, 1) = Metka Then
k = k + 1
With ShCel
For j = 1 To 11
.Cells(k, j).FormulaR1C1 = A(i, j)
Next
.Cells(k, 12) = Gog
.Cells(k, 13) = Mes
End With
End If
Next i
End With
wb_Tek.Close SaveChanges:=False
MyFileName = Dir
Loop
With ShCel
.[L1] = "Год"
.[m1] = "Месяц"
.Range("A1:M" & k).Borders.LineStyle = xlContinuous
.Cells(k, 1).Select
End With
End Sub