Попробуйте это. Вы можете сократить свой 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