How to copy the contents of the active sheet to a new workbook?

后端 未结 4 1922
星月不相逢
星月不相逢 2020-12-06 17:37

I\'m trying to copy the contents of the active sheet to a new workbook.

Sub new_workbook()

    Dim ExtBk As Workbook
    Dim ExtFile As String

    Columns(         


        
相关标签:
4条回答
  • 2020-12-06 18:14

    I made it work:

    Sub cp2NewWb()
        Dim ExtFile As String
        ExtFile = ThisWorkbook.Path & "output.xls"
        Workbooks.Add.SaveAs Filename:="output.xls"
    
        Windows("test1.xlsm").Activate
        Range("A1:AA100").Copy
        Windows("output.xls").Activate
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Worksheets(Worksheets.Count).Columns("A:AA").EntireColumn.AutoFit
        Range("A1").Select
    
        Windows("test1.xlsm").Activate
        Application.CutCopyMode = False
        Range("A1").Select
    End Sub
    

    I need to do it between activating windows or it doesn't work.

    0 讨论(0)
  • 2020-12-06 18:16

    If you are copying the entire area, then copy the worksheets:

    Worksheets("Sheet1").Copy Workbooks(2).Worksheets(1)
    

    If it copies a couple of columns that you don't need then you could delete this afterwards.

    If you are copying from .xlsx to .xls then you'll need to use Copy/Paste:

    Worksheets("Sheet1").UsedRange.Copy Workbooks(2).Worksheets(1).Range("A1")
    

    If pasting values is required:

    Workbooks(2).Worksheets(1).UsedRange.Copy
    Workbooks(2).Worksheets(1).Range("A1").PasteSpecial xlPasteValues
    

    Be aware that UsedRange won't start from A1 unless this cell has some content. In which case, you'll have to define a Range object that starts at A1 and extends to the last used cell.

    0 讨论(0)
  • 2020-12-06 18:26

    Don't use Copy method at all if you're only concerned with saving the Values.

    Sub new_workbook()
    Dim wbMe As Workbook: Set wbMe = ThisWorkbook
    Dim ws As Worksheet: Set ws = wbMe.ActiveSheet
    Dim ExtBk As Workbook
    
    Set ExtBk = Workbooks.Add
    ExtBk.SaveAs Filename:=wbMe.Path & "\output.xls"
    
    ExtBk.Worksheets("Sheet1").Range("A:N").Value = ws.Range("A:N").Value
    
    Application.DisplayAlerts = False
    ExtBk.Save
    Application.DisplayAlerts = True
    
    End Sub
    

    Note: this will fail (and so will your code, previously) if your ThisWorkbook is unsaved.

    0 讨论(0)
  • 2020-12-06 18:33
    Private Sub ExceltoExcel()
        Application.DisplayAlerts = False
        Application.EnableEvents = False
        'Input Data
         Sheets("Sheet1").Cells(1, 1).Select
         col = Sheets("Sheet1").Cells(2, 2)
         Dim exlApp As Excel.Application
         Dim ExtBk As Excel.Workbook
         Dim exlWs As Excel.Worksheet
         ExtFile = ThisWorkbook.Path & "\output.xls"
         Set exlApp = CreateObject("Excel.Application")
         Set ExtBk = exlApp.Workbooks.Open(ExtFile)
         Set exlWs = exlWb.Sheets("Sheet1")
         ExtBk.Activate
         exlWs.Cells(2, 2) = col
         'Output Data
         exlWs.Range("A1").Select
         exlWb.Close savechanges:=True
         Set ecxlWs = Nothing
         Set exlWb = Nothing
         exlApp.Quit
         Set exlApp = Nothing
         Application.EnableEvents = True
         Application.DisplayAlerts = True
    End Sub
    
    0 讨论(0)
提交回复
热议问题