for Each.. .next

08/10/2008 - 23:55 por Manny_90 | Informe spam
Hice una grabacion para eliminar un renglon si una celda tiene cierto nombre,
el ejercicio lo hice con FOR EACH ...NEXT, per no orra todos los renglones
que tienen ese nombre, y a la mitad del caro me sale un mensaje "Code
execution has been interrupted".

Me podrian ayudar a revizar si hice mal en el codigo.. gracias..


Sub unoddd()
Dim Uuno As Range
Dim celda As Range
Range("E2").Select
Set Uuno = Range(ActiveCell, ActiveCell.End(xlDown))
uno = "GE MULTILIN - 316 - 00059870"
dos = "SONITROL CORPORATION - 492 - 00140000"
tres = "WHITE RODGERS - 538 - 00199100"
For Each celda In Uuno
If celda = uno Or celda = dos Or celda = tres Then
celda.EntireRow.Delete
End If
Next celda
End Sub
 

Leer las respuestas

#1 Héctor Miguel
09/10/2008 - 07:30 | Informe spam
hola, !

Hice una grabacion para eliminar un renglon si una celda tiene cierto nombre
el ejercicio lo hice con FOR EACH ...NEXT, per no orra todos los renglones que tienen ese nombre
y a la mitad del caro me sale un mensaje "Code execution has been interrupted".
Me podrian ayudar a revizar si hice mal en el codigo...



el codigo que expones funciona bien (y no se aprecia alguna causa del error que mencionas) ;)
pero... este tipo de eliminacion de filas es mejor si lo haces de manera diferente (p.e.)

"en reversa"...

Sub Eliminar()
Dim Fila As Integer, Uno As String, Dos As String, Tres As String
Uno = "GE MULTILIN - 316 - 00059870"
Dos = "SONITROL CORPORATION - 492 - 00140000"
Tres = "WHITE RODGERS - 538 - 00199100"
For Fila = Range("e65536").End(xlUp).Row To 2 Step -1
Select Case Range("e" & Fila)
Case Uno, Dos, Tres
Range("e" & Fila).EntireRow.Delete
End Select
Next
End Sub

o mejor aun, en lugar de "ir eliminando FILA POR FILA"... elimina todas en un solo paso
(siempre y cuando NO se llegue a "acumular" mas de 2048 rangos no-contiguos o areas)...

Sub Eliminar_2()
Dim Fila As Integer, Uno As String, Dos As String, Tres As String, Elimina As Range
Uno = "GE MULTILIN - 316 - 00059870"
Dos = "SONITROL CORPORATION - 492 - 00140000"
Tres = "WHITE RODGERS - 538 - 00199100"
For Fila = 2 To Range("e65536").End(xlUp).Row
With Range("e" & Fila)
If .Value = Uno Or .Value = Dos Or .Value = Tres Then _
Set Elimina = Union(IIf(Elimina Is Nothing, Range("e" & Fila), Elimina), Range("e" & Fila))
End With
Next
If Not Elimina Is Nothing Then Elimina.EntireRow.Delete: Set Elimina = Nothing
End Sub

saludos,
hector.

Preguntas similares