Copy Excel sheet to another excel book without formulas

痴心易碎 提交于 2020-07-20 03:50:07

问题


I'm using this VBA code that covers all my requisites to transform all my workbook, including pivot tables and formulas into values.

Option Explicit
 Sub Copia()
    Dim ws As Worksheet, pvt As PivotTable, aWs As Worksheet, lst As ListObject

    Set aWs = ActiveWorkbook.ActiveSheet
    For Each ws In ActiveWorkbook.Worksheets
        With ws
            For Each pvt In ws.PivotTables
                With pvt.TableRange2
                    .Copy
                    .PasteSpecial xlPasteValues
                    .PasteSpecial xlPasteFormats
                End With
            Next pvt
            For Each lst In .ListObjects
                If Not lst.AutoFilter Is Nothing Then lst.Range.AutoFilter
            Next
            If .FilterMode Then .ShowAllData
            If .AutoFilterMode Then .AutoFilter.ShowAllData
            .UsedRange.Value = .UsedRange.Value
            .Activate: .Cells(1, 1).Select
        End With
    Next
    aWs.Activate
    Application.CutCopyMode = False

    End Sub

How can I adapt it to copy only my active sheet or a specific sheet into a new workbook?

Thanks!

MD


回答1:


you'd better generate a single worksheet handling sub to pass a worksheet to

like follows:

Option Explicit    

Sub CopiaWS(ws As Worksheet)
    Dim pvt As PivotTable, aWs As Worksheet, lst As ListObject

    Set aWs = ActiveWorkbook.ActiveSheet
    With ws
        For Each pvt In ws.PivotTables
            With pvt.TableRange2
                .Copy
                .PasteSpecial xlPasteValues
                .PasteSpecial xlPasteFormats
                Application.CutCopyMode = False
            End With
        Next pvt
        For Each lst In .ListObjects
            If Not lst.AutoFilter Is Nothing Then lst.Range.AutoFilter
        Next
        If .FilterMode Then .ShowAllData
        If .AutoFilterMode Then .AutoFilter.ShowAllData
        .UsedRange.Value = .UsedRange.Value
        .Activate: .Cells(1, 1).Select
    End With
    aWs.Activate
End Sub

this way you have separated code to handle e specific task thus:

  • uncluttering main code with variable unnecessary to the main task

  • making your code more maintainable and debuggable

in fact you now can have your main code concentrate on processing a single worksheet or a single one, without worrying of the process details you coded away in an already (hopefully) stable and robust Sub:

Sub Main()

    ' other "main" code

    CopiaWS Worksheets("MySheetName") '<--| process a single worksheet

    ' other "main" code

End Sub


Sub MainAll()
    Dim ws As Worksheet

    ' other "main" code

    For Each ws In ActiveWorkbook.Worksheets
        CopiaWS ws '<--| process current loop worksheet
    Next ws

    ' other "main" code

End Sub



回答2:


Here are two ways to copy a worksheet from one workbook to another.

'Copy a worksheet "Sheet1" from workbook "Book1" to "Book2."
'Concise
Workbooks("Book1.xlsx").Sheets("Sheet1").Copy Before:=Workbooks("Book2").Sheets(1)

'As a standalone sub
Sub CopySheetFromBook1ToBook2(shtName As String, wb1Name As String, wb2Name As String)

    Dim wb1 As Excel.Workbook
    Dim wb2 As Excel.Workbook

    ' Open workbooks
    Set wb1 = Workbooks.Open(wb1Name) ' or Set wb1 = ActiveWorkbook
    Set wb2 = Workbooks.Open(wb2Name)

    ' Coy shtName from wb1 to wb2
    wb1.Sheets(shtName).Copy Before:=wb2.Sheets(1)

End Sub


来源:https://stackoverflow.com/questions/39799241/copy-excel-sheet-to-another-excel-book-without-formulas

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!