Be careful with the .Find command line. This forum likes to insert blank lines into code. There should be no blank lines in the 3line find command.
Option Explicit
Sub insert_item_row()
Dim rw As Long, fnd As Range, addr As String
rw = Selection.Cells(1).Row
With ActiveSheet
'check if this is an Item row
If LCase(.Cells(rw, "D")) = "sub total" Then
'selection is not an item row
MsgBox "this sub procedure is not designed to create subtotal rows" & Chr(10) & "choose an item row", vbOKOnly + vbCritical, "bad choice"
Exit Sub
End If
'copy, shift down, then insert
.Range(.Cells(rw, "A"), .Cells(rw, "H")).Copy
.Cells(rw + 1, "A").Insert Shift:=xlDown
'clear some cell content
Union(.Range(.Cells(rw + 1, "B"), .Cells(rw + 1, "D")), Cells(rw + 1, "H")).ClearContents
'zero some cell values
.Range(.Cells(rw + 1, "E"), .Cells(rw + 1, "F")) = 0
'correct column A formula
.Cells(rw, "A").Resize(2, 1).FillDown
'repair all sections' subtotal row formula
With .Range("D:D")
'find first 'sub total'
'temporaily disable error handling
On Error Resume Next
Set fnd = .Find(What:="sub total", after:=.Cells(1), LookIn:=xlFormulas, _
LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False, _
SearchOrder:=xlByRows, SearchDirection:=xlNext)
'restore error handling
On Error GoTo 0
'was one found?
If Not fnd Is Nothing Then
'save first found item address
addr = fnd.Address(0, 0)
'loop through all 'sub total' rows correcting formulas
Do
'assign correct formula to column G
fnd.Offset(0, 3).FormulaR1C1 = "=sum(R[-1]C:index(R3C:R[-1]C, iferror(match(""zzz"", R3C[-3]:R[-1]C[-3])+1, 1)))"
'look for another
Set fnd = .FindNext(after:=fnd)
'continue until it loops back to the first
Loop Until addr = fnd.Address(0, 0)
End If
End With
End With
End Sub