See if this works for you, It Compiles, but is not otherwise tested.
Private Sub Worksheet_Change(ByVal Target As Range)
Const SALES_PWD = "123"
Dim i As Long
Dim Rw As Long
Dim NewRw As Long
Dim Frmla As String
Dim Cols As Variant
Dim ErrMsg As String
On Error GoTo ErrHandler 'Skip Rest of Sub on Error
'Verify correct Target
ErrMsg = "Error while Verifying Target"
If Intersect(Target, Range("H4:H" & Rows.Count)) Is Nothing Then Exit Sub
If Cells(Target.Row, "K").Value = 0 Then Exit Sub
If Not MsgBox("Add new row?", vbYes) Then Exit Sub
Rw = Target.Row
NewRw =Rw + 1
Frmla = "=F" & Rw & "-H" & Rw
'Load Array with Column #'s of Cells to copy to new Row
Cols = Array(1, 2, 3, 4, 5, 7, 9, 10, 11)
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:=SALES_PWD
ErrMsg = "Error while Copying Cells"
Rows(NewRw).Insert
'Copy required cells to new Row
For i = 0 To UBound(Cols)
Cells(NewRw, Cols(i)) = Cells(Rw, Cols(i))
Next i
ErrMsg = "Error While adding Formula"
Cells(NewRw, "F").Formula = Frmla
Range("H" & Rw).Select
GoTo GracefulExit 'Skip Error Mssage
ErrHandler:
MsgBox ErrMsg
GracefulExit:
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
Scenarios:=True, Password:=SALES_PWD
Application.ScreenUpdating = False
End Sub