Страницы: 1
RSS
Добавить второй лист в новую книгу
 
Здравствуйте, есть макрос, который разбивает один файл на несколько других по элементам фильтра из столбца "T". Он выводит в текущую папку к основному файлу созданные новые файлы. Потребовалось добавить в каждый из этих новых файлов еще один лист, который уже содержится в исходной книге, сохранив его имя. Но никак не соображу как это сделать:

Код
Sub Разбить_по_файлам_ИЗМ()    
Dim oDic As Object, oFSO As Object    
Dim arrData(), arrSeparateItems()    
Dim TempWb As Workbook    
Dim sFolderPath As String, sFullFileName As String    
Dim LastRow As Long, i As Long, n As Long    
Dim RngData As Range, FilteredRng As Range        
If MsgBox("Разбить по файлам?", vbQuestion + vbYesNo, "Вопрос") = vbNo Then Exit Sub        
sFolderPath = ThisWorkbook.Path & "\" 'здесь укажите путь для сохранения файлов      
Application.ScreenUpdating = False       
Set oFSO = CreateObject("Scripting.FileSystemObject")    
Set oDic = CreateObject("Scripting.Dictionary")       
Dim shSource As Worksheet    
Set shSource = ActiveSheet       
Dim Application_Calculation As XlCalculation    
Application_Calculation = Application.Calculation   
Application.Calculation = xlCalculationManual       
With shSource              
If .FilterMode = True Then .ShowAllData        
LastRow = .Cells(.Rows.Count, 12).End(xlUp).Row        
arrData = .Range("T1:T" & LastRow).Value 'столбец, где нужно найти уникальные значения        
Set RngData = .Range("A1").CurrentRegion    
End With       
For i = 21 To UBound(arrData)        
If Not oDic.Exists(arrData(i, 1)) Then oDic.Add arrData(i, 1), 0&    
Next i       
arrSeparateItems() = oDic.Keys       
For n = LBound(arrSeparateItems) To UBound(arrSeparateItems)        
shSource.Copy

 



ХОТЕЛОСЬ БЫ СЮДА СКОПИРОВАТЬ ЕЩЕ ЛИСТ "Новый лист", КОТОРЫЙ СОДЕРЖИТСЯ В ИСХОДНОЙ КНИГЕ      






Set TempWb = ActiveWorkbook 
...ОПРЕДЕЛЕННЫЕ ДЕЙСТВИЯ С ЛИСТОМ, СКОПИРОВАННЫМ В ТЕКУЩУЮ КНИГУ... 
ActiveSheet.name = arrSeparateItems(n)         
sFullFileName = sFolderPath & arrSeparateItems(n) & ".xlsx"        
If oFSO.FileExists(sFullFileName) Then oFSO.Deletefile (sFullFileName)        
TempWb.SaveAs sFullFileName, FileFormat:=xlOpenXMLWorkbook 'XLSX        
TempWb.Close SaveChanges:=False    
Next n       
With ActiveSheet        
If .FilterMode = True Then .ShowAllData    
End With      
Application.Calculation = Application_Calculation    
Application.ScreenUpdating = True    
MsgBox "Файлы сохранены в " & sFolderPath, vbInformation, "Конец"
End Sub

Выделил в коде место, где текущий лист копируется в новую книгу. Хотелось бы туда же вставить еще и лист с названием "Новый лист", содержащийся в исходной книге.
То есть по смыслу что-то вроде:

Код
Sheets(Array(Новый лист", ТЕКУЩИЙ ЛИСТ ЗАДАННЫЙ СЕЙЧАС КАК ShSourse)).Copy
Надеюсь смысл передал и пример файл-пример тут вроде не нужен. Подскажите, как тут добавить этот лист?
Изменено: Валерий Анисомов - 13.09.2024 16:47:25
 
Валерий Анисомов,  не пробовали
Цитата
Валерий Анисомов написал:
что-то вроде:
Попробуйте что-то вроде
Код
Sheets(Array(shSource1.Name, shSource2.Name)).Copy
 
Попробовал
Код
Sheets(Array(shSource.name, "Новый лист")).Copy
Не работает (
 
Цитата
Валерий Анисомов написал:
Не работает (
А так?
Код

Sub tt()
Set shSource1 = ActiveSheet
Set shSource2 = Sheets(ActiveSheet.Index + 1)
Sheets(Array(shSource1.Name, shSource2.Name)).Copy
End Sub

 
Hugo,
Код
Set shSource2 = Sheets("Новый лист")
Sheets(Array(shSource.Name, shSource2.Name)).Copy
Так заработало, спасибо!
Код
Sheets(Array(shSource.Name, "Новый лист")).Copy
Так тоже оказывается работает. Это я балбес, первый раз неправильно название листа написал (он с пробелом был в файле). Спасибо еще раз
Изменено: Валерий Анисомов - 13.09.2024 18:52:55
 
Так можно было проще ))
Код
Sheets(Array(shSource.Name, Sheets("Новый лист")).Copy
Изменено: Hugo - 13.09.2024 18:52:25 (скобочку подчистил)
Страницы: 1
Наверх