• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

regels verwijderen (bij lege cel in een bepaalde kolom) lukt niet

Status
Niet open voor verdere reacties.

gGerretje

Gebruiker
Lid geworden
12 mrt 2008
Berichten
439
Hallo beste helpers,

Ik heb een werkblad met daarin een aantal regels opgeslagen gegevens.
Het gaat om oude codes, die met wat andere gegevens (datum, medewerker, ordernummer) worden gekoppeld aan een nieuwe code.
De codes komen in mijn bestand met een barcodescanner en het kan soms gebeuren zijn dat een code niet gescand hoeft te worden.
Ik heb dus zowel bij de oude codes als bij de nieuwe codes kans op een leeg veld.

Ik moet nu de regels waarbij dat het geval is (in het voorbeeldbestand in kolom C en kolom I) verwijderen.

Ik dacht dat het met de volgende regel zou moeten kunnen, maar daar heb ik me kennelijk in vergist.

Code:
    Range("C5", Range("C10000").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Verander ik C5 en C10000 in I5 en I10000 dan gaat het ook niet.
Ook C5 en I10000 levert geen resultaat, maar A5 en I10000 verwijdert wel alle regels.

Wat heb ik over het hoofd gezien?

Groetjes,
Ger

Bekijk bijlage Test_regelsverwijderen.xlsm
 
Waarom sorteer je niet op kolom C ?

Je kunt geen regels verwijderen in Excel; het blijven er steeds 2^20
 
Laatst bewerkt:
Code:
 Range("C5:C10000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Dit zou gewoon werken als de cellen inderdaad leeg waren. maar dat zijn ze niet.
 
Daar was ik al bang voor Sjon.
Maar ik zie ook geen spaties of zo.
 
gebruik

Code:
Cells(5, 4).CurrentRegion.Sort Cells(5, 3), 2
 
Laatst bewerkt:
Om ze "echt" leeg te maken kan je deze draaien. Daarna werkt het wel.

Code:
Sub leeg()
Application.ScreenUpdating = False
For Each cl In Range("C5:C10000")
If Len(cl) < 10 Then cl.ClearContents
Next
Application.ScreenUpdating = True
End Sub
 
Ik ga het meteen proberen.

Dank je wel Sjon.

Maar waaraan zie je nu dat die cellen in kolom C niet leeg zijn?

Ik heb ze overigens leeg gemaakt met
Code:
blabla.Value = ""
.
Dat zal dus niet de goede manier zijn?
Beter met
Code:
.Clear
?

Groetjes,
Ger
 
Op het oog lijken ze leeg, maar als je de - inmiddels aangepaste - code van snb zou draaien dan zie je direct welke cellen leeg zijn en welke niet.

Code:
Columns(3).SpecialCells(4).Select
 
Hallo Snb en Sjon,

De code van snb (#6) is me niet duidelijk.
Ik heb nooit op deze manier gesorteerd.
Volgens mij is deze toch ook alleen bedoeld om te sorteren. Klopt dat?
Maar ik kan toch met mijn knoppen al gewoon sorteren op kolom C en op kolom I.
Is daar iets mis mee dan?

# 7 van Sjon is me duidelijk. Maar ik ga natuurlijk wel nog kijken of ik ervoor kan zorgen dat die cellen in de voorkomende gevallen ook echt leeg blijven als ik de gegevens naar dit blad schrijf.

En als ik de code van Sjon nu toepas in de code achter mijn knop krijg ik:
Code:
    For Each cl In Range("C5:C10000")
        If Len(cl) < 10 Then cl.ClearContents
    Next
    Range("C5", Range("C10000").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Daarbij duurt het lang voor die 10000 cellen in kolom C doorlopen zijn, dus daar zou ik dan liever iets gebruiken zoals met die End(xlUp) (overigens: daar kom ik wel uit dan).
Maar mijn laatste regel doet nog altijd niets.
Die zou toch inmiddels ook de regels moeten verwijderen waarbij cel C leeg is?
 
Laatst bewerkt:
Als ik in de laatste regel de range vervang door "C1:C10000" werkt het inderdaad wel Sjon,

Maar ik heb nou net zo'n mooie dikke handleiding om bijvoorbeeld die code van #10 te gebruiken.
Hoe kan het nou dat die niet werkt?
 
Je heb een raar teken in de 'lege cellen' staan. Even TextToColumns gebruiken lijkt het te verhelpen.

Code:
Private Sub cmd_VerwijderRegelsMetLegeCodes_Click()
  With Cells(5, 4).CurrentRegion.Resize(, 1)
    .TextToColumns FieldInfo:=Array(1, 2)
    .SpecialCells(4).EntireRow.Delete
  End With
End Sub

Voor het sorteren
Code:
Private Sub cmd_SorteerOpOudeSSCCcodes_Click()
  Cells(5, 4).CurrentRegion.Sort Cells(5, 9)
End Sub
Code:
Private Sub cmd_SorteerOpSSCCcodes_Click()
  Cells(5, 4).CurrentRegion.Sort Cells(5, 3)
End Sub

Het is overigens niet handig om een voorbeeldje te plaatsen dat bij het openen de status van bepaalde zaken aanpast zonder dat het bij het sluiten weer hersteld wordt.
 
Hallo V&A,

Heel erg bedankt voor je bijdrage.
Alleen: op een of andere manier heb ik het idee dat ik alleen maar verder van huis raak.

Ja, jouw code om te sorteren werkt prima en is stukken korter dan die van mij.
Maar ik heb een handleiding van bijna 800 pagina's gekocht, helemaal doorgenomen. Ik begrijp de code die ik gebruik heb, maar die blijkt dan niet te werken.
En de oplossing is dan meestal een heel andere code (die ik in zo'n handleiding nergens tegenkom en die ik ook niet ken) die wel werkt en die veel korter is.

Met TextNaarKolommen (ik heb de knop onder het menu 'Gegevens"gebruikt) krijg ik plotseling een weergave in E-notatie dus met 8,71.... E16. Dat is natuurlijk niet de bedoeling.

Het verwijderen gaat in eerste instantie goed, maar als ik (en dus later mijn gebruiker) dan nogmaals op die knop drukt zijn er geen lege cellen meer in kolom C en krijg ik een foutmelding (1004 Er zijn geen cellen gevonden).

Verder moet dus nog de rijen verwijderen waarbij de cel in kolom I leeg is.
En ik heb geen idee wat ik zou moeten wijzigen of toevoegen om datzelfde voor elkaar te krijgen voor de lege cellen in kolom I.

Ik hoop dat de helpers me nog wat verder kunnen helpen vandaag.
 
Het is een Alt+0010 in zoeken en vervangen.

Code:
Sub hsv()
 Columns(3).Replace "", " "
 Columns(3).Replace " ", ""
on error resume next  'voor een tweede keer drukken zonder lege cellen!!
 Range("c5:c5000").SpecialCells(4).EntireRow.Delete
End Sub
 
Laatst bewerkt:
Dag Harry,

Ik heb even gewacht met een reactie omdat ik de opmaak van de blauwe cellen niet goed kreeg (zie ook mijn laatste vraag).
Eergisteren pakte ik de draad weer op en bleek die opmaak plotseling wel goed te zijn.
Althans, die blauwe vakjes met gescande codes hadden nu wel allemaal dezelfde inhoud.
Het wegschrijven ging al goed.
Voor de volledigheid onderstaand de hele procedure.
Code:
Private Sub cmd_VerwijderRegelsMetLegeCodes_Click()
    Dim WachtWoord As String
    
    Application.ScreenUpdating = False
    WachtWoord = ThisWorkbook.Sheets("Beveiliging").Range("D3").Value
    ActiveSheet.Unprotect Password:=WachtWoord
    '##### Het verwijderen
    On Error Resume Next
    Range("C5:C10000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Range("J5:J10000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    
    Range("A1").Select
    ActiveSheet.Protect Password:=WachtWoord, DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Dat gebruik van het wachtwoord op een verborgen blad is natuurlijk niet volgens de regels der kunst, maar deze "klant" is niet bang voor misbruik van dat wachtwoord. Er worden ook alleen maar regels met barcodes opgeslagen.

Daarnaast was het grootste probleem de opmaak van de controlevelden. Dat gaf steeds andere resultaten.
Waarschijnlijk had dat te maken met de samengevoegde cellen in combinatie met de voorwaardelijke opmaak.
Die voorwaardelijke opmaakregels heb ik eruit gehaald en alles via normale opmaak met VBA-code aangestuurd.
Mijn "klant" kan binnenkort weer blij zijn.

Bedankt voor je hulp.
Ook de andere helpers heel erg bedankt voor het meedenken, jullie voorstellen en jullie oplossingen.

Groetjes,
Ger
 
Laatst bewerkt:
Hallo Harry,

Naast al mijn probeerwerk heb ik die zoek en vervangregels van jou nog eens geprobeerd.
Het werkt, dus in feite kan ik hiermee verder.

Maar je het is toch in feite een oplossing die niet nodig zou moeten zijn?
Volgens alle gebruikte codes zoude de betreffende cellen toch gewoon leeg moeten zijn?
Of eis ik teveel als ik dat zo stel?

Maar natuurlijk wel bedankt voor je oplossing.

Groetjes,
Ger
 
Misschien komt het door je barcodescanner.

In ieder geval mooi dat het werkt; bedankt voor je reactie.
 
Hallo Harry,

Aan de barcodescanner kan het niet liggen want ik ben nu gewoon handmatig op mijn PC aan het testen.
Die barcodescanner wordt alleen gebruikt door de klant.

Maar zou je zo vriendelijk willen zijn toch nog eens mee te kijken naar het werkelijke probleem bij deze en mijn andere vraag?

Alvast bedankt,
Groetjes,
Ger
 
Hallo Ger,

De codes komen in mijn bestand met een barcodescanner

En onderstaande geeft geen resultaat zoals je vermelde.

Code:
    Range("C5", Range("C10000").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Er schijnt toch een Alt+0010 in de cellen te staan die waarschijnlijk afkomstig is van de scanner.
Met de code die ik plaatste en het resultaat van de test daarop lijkt mij het probleem verholpen toch?
 
Hallo Harry,

In de uiteindelijke situatie wordt inderdaad een barcodescanner gebruikt.
Op dit moment ben ik gewoon nog aan het testen, en daarbij gebruik ik geen barcodescanner.

Voor het verwijderen gebruik ik de volgende regels:
On Error Resume Next
Range("C5:C10000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Range("J5:J10000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Het voordeel daarvan is dat ik niet eerst op kolom C en dan op kolom J hoef te sorteren.
In eerste instantie had ik inderdaad die regel van jou, maar omdat die cellen niet echt leeg bleken te zijn werkte dat sorteren al niet optimaal.

Die lege cellen (die niet leeg zijn) vormen dus het grote probleem.
Zolang ik dat niet opgelost heb blijf ik een beetje achter de feiten aanlopen.

Ik zoek dus nog steeds naar een oplossing die ervoor zorgt dat die opgeslagen cellen echt leeg zijn.
En om dat te bereiken moeten de cellen op mijn scanscherm dus echt leeg zijn (als er geen barcode in staat).
Ik hoop dat zo'n oplossing er is want ik heb er helaas nog geen werkende suggesties voor.

Ik had gehoopt dat die code van SjonR: zou werken, maar dat is dus ook niet het geval:
Code:
If Len(cl) < 10 Then cl.ClearContents
En ook die
Code:
tekstvak.Text = vbNullString
of "" of vbEmpty zoals genoemd in
HTML:
http://www.helpmij.nl/forum/showthread.php/208476-Tekstvak-leegmaken
werkt niet. OK uit 2005, maar het klinkt logisch en ik krijg er ook geen foutmelding op.
Dan begin je toch langzaamaan gek te worden?

Groetjes,
Ger
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan