VBA script oneindig / stopt niet

Status
Niet open voor verdere reacties.

lieke66

Gebruiker
Lid geworden
29 jul 2016
Berichten
47
Beste Helpmij'ers,

Ik heb code geschreven om een rij te verwijderen als de waarde in kolom A niet voldoet aan mijn waarde.
De code werkt. Echter, als alleen de juiste rijen over zijn blijft het script maar doorlopen. Hij stopt iig niet. Hij stopt pas als ik Excel beëindig met Ctrl Alt Del....

Ik weet niet goed waar het mis gaat. Dus zouden jullie mee willen kijken?

Code:
Sub DeleteRowIf()
    
    Dim sn, i As Long
    sn = Columns(1).SpecialCells(2)
        With CreateObject("scripting.dictionary")
         For i = 1 To UBound(sn)
            .Item(sn(i, 1)) = ""
         Next i
        MsgBox .Count
        End With
    
    Dim j As Long
    NumRows = Sheets("Data BE").Range("A5", Range("A5").End(xlDown)).Rows.Count
    Sheets("Data BE").Range("A5").Select
    
    Dim xLab As Range
        
    For j = 5 To NumRows
        Set xLab = Worksheets("Data BE").Range("A" & j)
        If CStr(xLab(j).Value) <> "111-1" Then
            xLab(j).EntireRow.Delete
            j = j - 1
        End If
    Next
    Application.ScreenUpdating = True

End Sub

Ik heb al geprobeerd om Set xLab = Worksheets("Data BE").Range("A" & j) buiten de For loop te zetten, maar dan kan ik hem niet runnen.

Alvast bedankt !
 

Bijlagen

  • DeleteRow.xlsm
    25,8 KB · Weergaven: 18
Rijen verwijderen doe je van onderaf. Door j= j-1 kom je in een oneindige loop.
Met een filter gaat het sneller
Code:
Sub VenA()
  With Sheets("Data BE").Cells(4, 1).CurrentRegion
    .AutoFilter 1, "<>111-1"
    .Offset(1).EntireRow.Delete
    .AutoFilter 1
  End With
End Sub
 
Hi VenA,
Dank voor je snelle reactie!

Een filter gaat niet werken, aangezien ik straks meerdere waarden heb waar een cel aan kan voldoen als hij moet blijven.

Hoe ziet mijn code eruit als ik van onderaan moet beginnen?
 
En waarom zou dat niet met een filter kunnen? Kijk maar eens naar het geavanceerde filter.
Van onderaf verwijderen doe je bv zo:
Code:
Sub VenA()
  With Sheets("Data BE").Cells(4, 1).CurrentRegion
    For j = .Rows.Count To 2 Step -1
      If .Cells(j, 1) <> "111-1" Then .Cells(j, 1).EntireRow.Delete
    Next j
  End With
End Sub
 
Laatst bewerkt:
Dat werkt als een malle! Dankjewel.

Ik ben beginner en hou soms nog te veel vast aan mijn eigen stramien: Ik heb een lijst Y, en als een waarde in lijst Y niet voldoet aan de waarde in lijst X -> dan moet deze verwijderd worden.

Als ik dan filters moet toevoegen, wordt het te lastig voor mij.. voor nu.
 
Eigenlijk loop ik vast als ik de lijst naloop aan de hand van de waardes.
In lijst X heb ik waardes staan.
Als deze waardes voorkomen in lijst Y -> Dan moet de regel blijven staan, anders verwijderd worden.

Maar hij verwijderd alles.

Code:
Sub DeleteRowIf()
    Dim MyCell As Range, MyRange As Range

    Set MyRange = Sheets("Lijst X").Range("A2")
    Set MyRange = Range(MyRange, MyRange.End(xlDown))

    Dim j As Long
    With Sheets("Data BE").Cells(4, 1).CurrentRegion
      For j = .Rows.Count To 2 Step -1
        For Each MyCell In MyRange
            If .Cells(j, 1) <> MyCell.Value Then .Cells(j, 1).EntireRow.Delete
        Next
    Next j
    End With

End Sub

Wat doe ik verkeerd...? Of moet ik toch aan de filter geloven?
 

Bijlagen

  • DeleteRow.xlsm
    25,8 KB · Weergaven: 16
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan