Удаление строк на именованных листах - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь удалить строку, содержащую значение ISIN, в рабочей книге на нескольких листах.

Я могу удалить ISIN на нескольких листах, но не на листе калибровки калибровки и листе топлива и качества.

Sub del()
    Dim num As Integer
    Dim del As String
    Dim q As Integer
    Dim a As Integer
    Dim i As Integer

    num = Range("A" & Rows.Count).End(xlUp).Row
    del = InputBox("Enter ISIN", "ISIN")
    a = Application.Worksheets.Count

    For q = 1 To a
        Worksheets(q).Activate
        If ActiveSheet.Name = "Price Selection for Upload" Then
            For i = 1 To num
                If Range("A" & i).Value = del Then
                    ActiveSheet.Rows(i).EntireRow.Delete
                End If
            Next i
        ElseIf ActiveSheet.Name = "Main Sheet" Then
            For i = 1 To num
                If Range("A" & i).Value = del Then
                    ActiveSheet.Rows(i).EntireRow.Delete
                End If
            Next i
        ElseIf ActiveSheet.Name = "Spread Calibration" Then
            For i = 1 To num
                If Range("A" & i).Value = del Then
                    ActiveSheet.Rows(i).EntireRow.Delete
                End If
            Next i
        ElseIf ActiveSheet.Name = "Fuel& Quality" Then
            For i = 1 To num
                If Range("B" & i).Value = del Then
                    ActiveSheet.Rows(i).EntireRow.Delete
                End If
            Next i
        ElseIf ActiveSheet.Name = "Sheet3" Then
            Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
            ActiveCell.Value = del
        End If
    Next q

    Worksheets("Email Details").Activate
    Worksheets("Email Details").Range("Q2").Select

End Sub

1 Ответ

0 голосов
/ 18 февраля 2020

Попробуйте это. Вы можете сократить свой l oop, комбинируя случаи с одинаковым результатом. Я использовал Select Case, но вы могли бы придерживаться If, поскольку вам не нужно повторять все для каждого имени листа.

Что еще более важно, при удалении l oop в обратном порядке, иначе вы рискуете пропустить строки .

Кроме того, цикл по каждой строке выполняется медленно, поэтому рассмотрите возможность использования Find или Autofilter.

Избегайте использования Select / Activate .

Если имена листов выбраны неправильно, проверьте наличие пробелов или пробелов и т. Д. c.

Sub del()

Dim num As Long 'use Long rather than integer
Dim del As String
Dim q As Long
Dim a As Long
Dim i As Long

num = Range("A" & Rows.Count).End(xlUp).Row 'need to add sheet reference
del = InputBox("Enter ISIN", "ISIN")
a = Application.Worksheets.Count

For q = 1 To a
    With Worksheets(q)
        Select Case .Name
            Case "Price Selection for Upload", "Main Sheet", "Spread Calibration"
                For i = num To 1 Step -1 'loop backwards
                    If .Range("A" & i).Value = del Then
                        .Rows(i).EntireRow.Delete
                    End If
                Next i
            Case "Fuel& Quality"
                For i = num To 1 Step -1
                    If .Range("B" & i).Value = del Then
                        .Rows(i).EntireRow.Delete
                    End If
                Next i
            Case "Sheet3"
                .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = del
        End Select
    End With
Next q

Application.Goto Worksheets("Email Details").Range("Q2")

End Sub
...