Имеется несколько (в данном случае - 30) однотипных таблиц excel, в каждом файле по одному листу. Стоит задача собрать все файлы в один с сохранением форматирования, но не в общий лист, а чтобы каждый файл содержался на отдельном листе, в идеале - чтобы каждый лист носил имя соответствующего объединяемого файла, и чтобы эти объединяемые файлы можно было считать из папки. Пробовал загуглить, нашлось очень много схожих, но не таких тем. Прошу помочь или ткнуть в нос готовым вариантом. Заранее спасибо!
Добрый день!
Имеется несколько (в данном случае - 30) однотипных таблиц excel, в каждом файле по одному листу. Стоит задача собрать все файлы в один с сохранением форматирования, но не в общий лист, а чтобы каждый файл содержался на отдельном листе, в идеале - чтобы каждый лист носил имя соответствующего объединяемого файла, и чтобы эти объединяемые файлы можно было считать из папки. Пробовал загуглить, нашлось очень много схожих, но не таких тем. Прошу помочь или ткнуть в нос готовым вариантом. Заранее спасибо!getbmah
Сообщение отредактировал getbmah - Понедельник, 20.02.2017, 13:49
Циклом считываете файлы из этой папки. В объединенном файле добавляете новый лист, копируете на него данные из открытого файла. Переименовываете лист. Закрываете файл и открываете следующий
Цитата
объединяемые файлы можно было считать из папки.
Циклом считываете файлы из этой папки. В объединенном файле добавляете новый лист, копируете на него данные из открытого файла. Переименовываете лист. Закрываете файл и открываете следующийKuzmich
Sub CombineWorkbooksv1() Dim FilesToOpen Dim x As Integer Dim wbk As Workbook Dim wbk2 As Workbook On Error GoTo ErrHandler Set wbk = ActiveWorkbook Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", _ MultiSelect:=True, Title:="Files to Merge") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "No files!" GoTo ExitHandler End If x = 1 While x <= UBound(FilesToOpen) Set wbk2 = Workbooks.Open(Filename:=FilesToOpen(x)) wbk2.Sheets().Move After:=wbk.Sheets(wbk.Sheets.Count) x = x + 1 Wend ExitHandler: Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Думаю, вопрос закрыт.
Спасибо! ps наткнулся на еще один способ:
Цитата
Sub CombineWorkbooksv1() Dim FilesToOpen Dim x As Integer Dim wbk As Workbook Dim wbk2 As Workbook On Error GoTo ErrHandler Set wbk = ActiveWorkbook Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", _ MultiSelect:=True, Title:="Files to Merge") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "No files!" GoTo ExitHandler End If x = 1 While x <= UBound(FilesToOpen) Set wbk2 = Workbooks.Open(Filename:=FilesToOpen(x)) wbk2.Sheets().Move After:=wbk.Sheets(wbk.Sheets.Count) x = x + 1 Wend ExitHandler: Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub