Here is the revised code for the copy selected rows button

I would urge you to use the Option Explicit at the top of every code to ensure that you find any compile errors for undefined variables.

Sub CopyRows()

For Each chkbx In ActiveSheet.CheckBoxes
    If chkbx.Value = 1 Then
        For r = 1 To Rows.Count
            If Cells(r, 1).Top = chkbx.Top Then
                With Worksheets("Estimate")
                    LRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
                    .Range("A" & LRow) = _
                    Worksheets("ItemList").Range("A" & r).Value
                    LRow = .Range("B" & Rows.Count).End(xlUp).Row + 1
                    .Range("B" & LRow) = _
                    Worksheets("ItemList").Range("C" & r).Value
                    LRow = .Range("C" & Rows.Count).End(xlUp).Row + 1
                    .Range("C" & LRow) = _
                    Worksheets("ItemList").Range("E" & r).Value
                    LRow = .Range("D" & Rows.Count).End(xlUp).Row + 1
                    .Range("D" & LRow) = _
                    Worksheets("ItemList").Range("G" & r).Value
                End With
                Exit For
            End If
        Next r
    End If
Next

End Sub