Здравствуйте, помогите пожалуйста, с макросом, про макросы написано много но чтобы все нужное мне в одном макросе не нашел, а собрать все в кучу ума не хватает. Имеется книга в ней 5 листов, нужно сохранить в отдельный файл третий лист только значения ячеек (без формул) и сохранить четвертый и пятый лист (два листа) в другой отдельный файл также только значения (без формул) все два файла сохранить в текущую папку, а название файлов берется из определенных ячеек, к примеру A1 и B1 со второго листа
Sub SaveSheetsAsValues()
Dim wb As Workbook
Dim wsName As Worksheet
Dim wsSource As Worksheet
Dim newBook1 As Workbook
Dim newBook2 As Workbook
Dim i As Integer
AccelerateBegin
' Указать активную книгу Excel с помощью надстройки
Set wb = ActiveWorkbook
' Указать второй лист для извлечения названий
Set wsName = wb.Sheets(2)
' Получить название для новых книг
Dim fileName1 As String
Dim fileName2 As String
fileName1 = wsName.Range("A1").Value
fileName2 = wsName.Range("B1").Value
' Создать новые книги Excel для четвертого и пятого листов
Set newBook1 = Workbooks.Add
Set newBook2 = Workbooks.Add
With wb
' Сохранить третий лист в первую новую книгу на первый лист с сохранением форматов и ширин столбцов
Set wsSource = .Sheets(3)
CopyRangeWithFormat wsSource.UsedRange, newBook1.Sheets(1).Range("A1")
newBook1.Sheets(1).Name = wsSource.Name
' Сохранить четвертый лист во вторую новую книгу на первый лист с сохранением форматов и ширин столбцов
Set wsSource = .Sheets(4)
CopyRangeWithFormat wsSource.UsedRange, newBook2.Sheets(1).Range("A1")
newBook2.Sheets(1).Name = wsSource.Name
' Добавить второй лист во вторую новую книгу
newBook2.Sheets.Add After:=newBook2.Sheets(1)
' Сохранить пятый лист во вторую новую книгу на второй лист с сохранением форматов и ширин столбцов
Set wsSource = .Sheets(5)
CopyRangeWithFormat wsSource.UsedRange, newBook2.Sheets(2).Range("A1")
newBook2.Sheets(2).Name = wsSource.Name
End With
' Сохранить новые книги
newBook1.SaveAs wb.Path & "\" & fileName1 & ".xlsx", FileFormat:=xlOpenXMLWorkbook
newBook2.SaveAs wb.Path & "\" & fileName2 & ".xlsx", FileFormat:=xlOpenXMLWorkbook
' Закрыть новые книги
newBook1.Close False
newBook2.Close False
AccelerateEnd
End Sub
Private Sub CopyRangeWithFormat(rngSource As Range, rngDestination As Range)
rngSource.Copy
rngDestination.PasteSpecial Paste:=xlPasteValues
rngDestination.PasteSpecial Paste:=xlPasteColumnWidths
rngDestination.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
Private Sub AccelerateBegin()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
End Sub
Private Sub AccelerateEnd()
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
End Sub
Option Explicit
Sub ForPavelSaveSheetsAsValues()
Dim rng As Range
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ThisWorkbook.Worksheets(3).Copy
With ActiveWorkbook.Sheets(1)
.UsedRange.Value = .UsedRange.Value
End With
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Worksheets(2).Range("A1").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close False
ThisWorkbook.Worksheets(4).Copy
With ActiveWorkbook
ThisWorkbook.Worksheets(5).Copy After:=.Sheets(1)
With .Sheets(1)
.UsedRange.Value = .UsedRange.Value
End With
With .Sheets(2)
.UsedRange.Value = .UsedRange.Value
End With
End With
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Worksheets(2).Range("B1").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Я в excel по 10 часов в день. Мне допустим не нужны данные только в значениях. Я предположил что нужно убрать именно формулы, а не оставить голый лист. Поэтому добавил сохранение форматов, которые можно убрать комментированием в функции. У Вас макрос исключительно для одной книги, у меня сделан в виде надстройки для любой книги Функции, которые убирают алерты и прочее использую постоянно, поэтому менять не стал(оставил как есть). Оба макроса выполняют одно и тоже, только мой написан для разных книг, Ваш написан для одной
P.S. Пересмотрел Ваш код. По поводу форматов я загнул
Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
уважаемые форумчане помогите пожалуйста изменить этот макрос так чтобы при сохранении в новых файлах корректно отображались числа которые начинаются на ноль, а то в новых файла ноль пропадает если он первый стоит, сам пробовал через ИИ сделать, в итоге в новых файлах то даты начинают некорректно отображать, то формулы становится видно
New, спасибо, что откликнулись, но не помогло, точнее ноль в конечном файле сохраняется, но даты перестали корректно отображаться, в принципе решил вопрос в исходном файле перед числом с первым нолем просто добавил ' (одинарную кавычку) и в конечном файле ноль стал сохраняться, но если все таки кто то поможет с макросом будет очень хорошо, не будет этого колхоза в одинарной кавычкой )