I have amended the code as described in Points 1 to 3 (see comments). I hope the new code does exactly what you require.
Dim Rng As Range
Dim RowCrnt As Long
Dim RowLastAA As Long
' Add a quote to the beginning of the statement if you
' want to watch the rows disppear
Application.ScreenUpdating = False
RowLastAA = 0
RowCrnt = Rows.Count ' Start search from row 1
Do While True
' * Find next row after RowCrnt that contains "AA" in column H
' * The first parameter of Find is the string to be searched for.
' * The second parameter is the cell from which the search is to
' * The last parameter I have used is the direction of the search.
' I have used xlNext meaning down or right. xlPrevious means
' up or left.
' * Find does not look at the start cell. It starts at the next
' cell in the chosen direction. It continues until it finds the
' required string or until it reaches the bottom or top when it
' wraps. I have intialised RowCrnt (the start row) to the bottom
' row so the search start from the next row in the chosen
' direction which is 1.
Set Rng = .Columns("H").Find("AA", .Cells(RowCrnt, "H"), _
xlFormulas, xlWhole, xlByRows, xlNext)
If Rng Is Nothing Then
' No AAs found
RowCrnt = Rng.Row
If RowCrnt <= RowLastAA Then
' Find wraps so when it reaches the bottom it starts again at
' the top. I have recorded the row of the last AA found in
' RowLastAA. If RowCrnt = RowLastAA, Excel has wrapped to the
' only AA in the sheet. If RowCrnt < RowLastAA, there are two
' or more AAs and Excel has wrapped to the first one.
'Loop deleting underscore rows until find a non-underscore row
Do While .Cells(RowCrnt + 2, 1).Value = "'-" Or _
.Cells(RowCrnt + 2, 1).Value = "-"
.Cells(RowCrnt + 2, 1).EntireRow.Delete
RowLastAA = RowCrnt ' Record this AA row so can detect loop
Application.ScreenUpdating = True