При удалении строк вам нужно немного отрегулировать l oop. Если вы удалите первую строку, вторая строка станет первой строкой, а ваш верхний предел станет слишком большим, и вы получите сообщение об ошибке.
Самый простой способ исправить это - l oop назад, начиная с последней строки и работайте в обратном направлении.
Другой метод - не увеличивать счетчик строк, пока он не встретит видимую строку и не перейдет к следующей.
Обновить
Ниже приведены примеры упомянутых мной методов. При работе с диапазонами row
относится к диапазону, поэтому он всегда изменяется от 1 до количества строк.
Sub Delete_Hidden_One()
Dim TargetRange As Range
Set TargetRange = Application.InputBox(Prompt:="Select the first Cell (Hidden Rows in the region of the selected cell will be deleted) ", Title:="Delete Hidden Rows", Type:=8)
Dim Row As Integer
Dim TargetStart As Integer
TargetStart = TargetRange.Rows.Count
For Row = TargetStart To 1 Step -1
If TargetRange.Rows(Row).EntireRow.Hidden = True Then
Debug.Print "Deleting Row <" & Row & ">"
TargetRange.Rows(Row).EntireRow.Delete xlShiftUp
Else
Debug.Print "Skipping Row <" & Row & ">"
End If
Next Row
End Sub
Sub Delete_Hidden_Two()
Dim TargetRange As Range
Set TargetRange = Application.InputBox(Prompt:="Select the first Cell (Hidden Rows in the region of the selected cell will be deleted) ", Title:="Delete Hidden Rows", Type:=8)
Dim Row As Integer
Row = 1
Do
If TargetRange.Rows(Row).EntireRow.Hidden = True Then
Debug.Print "Row <" & Row & "> Is Hidden - Deleting"
TargetRange.Rows(Row).EntireRow.Delete xlShiftUp
Else
If Row < TargetRange.Rows.Count Then
Debug.Print "Row <" & Row & "> Is Not Hidden - Incrementing"
Row = Row + 1
Else
Debug.Print "Row <" & Row & "> Is Out-Of-Bounds - Exiting"
Exit Do
End If
End If
Loop
End Sub