пропустить следующий лист после удаления активного листа vba - PullRequest
0 голосов
/ 05 июля 2019

Я пишу макрос для проверки чего-либо на каждом листе.Если лист содержит необходимую информацию, он сохраняется, в противном случае удаляется.Но моя проблема в том, что после удаления листа фокус автоматически переходит на следующий лист.следовательно, когда код попадает на следующий лист, он фактически пропускает один лист посередине.

Я пробовал следующий код:

Sub filterdelete()

Dim current As Workbook
Dim sht As Worksheet
Dim rowN As Integer

Set current = ActiveWorkbook
On Error Resume Next

For Each sht In current.Worksheets
If sht.Name <> "hiddensheet" Then

With sht
    .Select
    .Range("A1").Select
End With

rowN = Cells(Rows.count, 1).End(xlUp).Row

Application.DisplayAlerts = False
If rowN = 1 Then ActiveSheet.Delete
Application.DisplayAlerts = True
End If
Next sht

End Sub

Я пробовал GoTo, также.Но это удаляет каждый лист.:(

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Вы должны перебирать листы в своей книге в обратном порядке, чтобы удаление листа не приводило к нежелательному поведению.

Попробуйте что-то вроде этого:

For i = current.Worksheets.Count To 1 Step -1
    // your code here
Next i
2 голосов
/ 05 июля 2019

Используйте переменную счетчика в вашем цикле и возвращайтесь назад.

Кроме того, используйте Long вместо Integer, если у вас больше строк, чем может обработать последняя.

Sub filterdelete()

Dim current As Workbook
Dim sht As Worksheet
Dim rowN As Long, i As Long

Set current = ActiveWorkbook

For i = current.Worksheets.Count To 1 step -1
    If current.Sheets(i).Name <> "hiddensheet" Then
        With current.Sheets(i)
            rowN = .Cells(Rows.Count, 1).End(xlUp).Row
            Application.DisplayAlerts = False
            If rowN = 1 Then .Delete
            Application.DisplayAlerts = True
        End With
    End If
Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...