Hi Emma,

Welcome to VBAX!

I'm guessing that your headings are in Row 1, columns A to J, and the same on all sheets. I've made some changes to the code, and added comments. It should now do what you ask.

Sub CreateSummary() 
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim f As String, x As String
f = "SUMMARY"
' New variable declarations
Dim SingleCell As Range
Dim HeadingsCopied As Boolean
For Each ws In ThisWorkbook.Worksheets
    ' No need to Activate the Sheet - it's jusrt a performance drain
    ' ws.Activate
    ' Use ws instead of ActiveSheet as we no longer Activate
    If ws.Name = f Then GoTo circumv1
    x = ws.Name
    ' Range defaults to ActiveSheet ...
    '  ...  as we don't have it any more, use ws explicitly
    With ws
         If .Range("J65536").End(xlUp).Row = 1 Then GoTo circumv1
         ' Copy Headings - once only
         If Not HeadingsCopied Then
        .Range("A1:J1").Copy Sheets(f).Range("A1:J1")
        HeadingsCopied = True
    End If
    ' Set reference to first target cell - and use it
    Set SingleCell = Sheets(f).Range("A65536").End(xlUp).Offset(1)
    With SingleCell
        .Value = x
        ' Make it bold
        .Font.Bold = True
        ' Note copy here - just before paste
        ws.Range("A2", ws.Range("J65536").End(xlUp)).Copy
        .Offset(1).PasteSpecial (xlPasteAll)
    End With
End With
circumv1:
Next ws
Sheets(f).Select
Application.ScreenUpdating = True
' Tidy Up
Set SingleCell = Nothing
Set ws = Nothing
End Sub