Excel VBA Макросы: Как скопировать лист в отдельный файл без формул?

Автор Стас, 08 января 2020, 13:56

Стас

Создал макрос для сохранения листов в отдельные файлы.
Но все значения берутся из третьего листа, из за этого в новых файлах остаются формулы, которые ссылаются на этот файл.
А необходимо скопировать с листа именно значения, а не формулы, чтобы значения не изменялись.

Макрос
Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    Dim sA As String
   
       
    sA = wb.Sheets("АктСчет").Range("I1")
    Set s = wb.Sheets(2)
    s.Copy
    ActiveWorkbook.SaveAs wb.Path & "\" & sA & ".xlsx"
   
    sA = wb.Sheets("АктСчет").Range("I2")
    Set s = wb.Sheets(3)
    s.Copy
    ActiveWorkbook.SaveAs wb.Path & "\" & sA & ".xlsx"   
End Sub
[свернуть]

Администратор

Скопировать целиком лист без формул нельзя. Формулы можно потом преобразовать в значения на созданном листе. Для этого нужно скопировать фрагмент, в котором формулы, и вставить скопированное в виде значений. В данном макросе используется весь используемый фрагмент. Не знаю, подойдёт ли вам такой вариант. Если нет, то работайте не со всем используемым фрагментом, а только с тем, в котором формулы.

Макрос
Sub SplitSheets2()

    Dim bk As Workbook, sh As Worksheet, sh_new As Worksheet
    Dim ИмяФайла As String
   
   
    Set bk = ActiveWorkbook
       
    ИмяФайла = bk.Sheets("АктСчет").Range("I1")
    Set sh = bk.Sheets(2)
    sh.Copy
    Set sh_new = ActiveSheet
    sh_new.UsedRange.Copy
    sh_new.UsedRange.PasteSpecial xlPasteValues
    ActiveWorkbook.SaveAs bk.path & "\" & ИмяФайла & ".xlsx"
   
    ИмяФайла = bk.Sheets("АктСчет").Range("I2")
    Set sh = bk.Sheets(3)
    sh.Copy
    Set sh_new = ActiveSheet
    sh_new.UsedRange.Copy
    sh_new.UsedRange.PasteSpecial xlPasteValues
    ActiveWorkbook.SaveAs bk.path & "\" & ИмяФайла & ".xlsx"

   Application.CutCopyMode = False
   
End Sub
[свернуть]