Search code examples
excelvbacopy-paste

Syntax error on Paste Special from ThisWorkbook to new workbook


First line of code works fine, second errors out with a syntax error. I want it to do the same thing as first line except paste values only.

ThisWorkbook.Sheets(1).Range(Range("A4"), Range("A4").End(xlDown)).Copy .Sheets(1).Range("A1")
ThisWorkbook.Sheets(1).Range(Range("G4"), Range("G4").End(xlDown)).Copy .Sheets(1).Range("B1").PasteSpecial xlPasteValues

Full code for the sub

Private Sub CommandButton1_Click()
    With Workbooks.Add
        ThisWorkbook.Sheets(1).Range(Range("A4"), Range("A4").End(xlDown)).Copy .Sheets(1).Range("A1")
        ThisWorkbook.Sheets(1).Range(Range("G4"), Range("G4").End(xlDown)).Copy .Sheets(1).Range("B1").PasteSpecial xlPasteValues

        Application.DisplayAlerts = False
        .SaveAs "C:\Users\my username\Desktop\Macro Demo\output.xlsx"
        Application.DisplayAlerts = True
        .Close
    End With
End Sub

Solution

  • Range("A4") and Range("A4").End(xlDown) may not belong to ThisWorkbook.Sheets(1) and you cannot define a range using cells from another worksheet.

    Private Sub CommandButton1_Click()
        Dim nwb As Workbook
    
        Set nwb = Workbooks.Add
    
        With ThisWorkbook.Sheets(1)
            .Range(.Range("A4"), .Range("A4").End(xlDown)).Copy _
                Destination:=nwb.Sheets(1).Range("A1")
            With .Range(.Range("G4"), .Range("G4").End(xlDown))
                nwb.Sheets(1).Range("B1").Resize(.Rows.Count, 1) = .Value
            End With
        End With
    
        With nwb
            Application.DisplayAlerts = False
            .SaveAs "C:\Users\my username\Desktop\Macro Demo\output.xlsx"
            Application.DisplayAlerts = True
            .Close
        End With
    
    End Sub