Regel verwijderen uit listbox

Status
Niet open voor verdere reacties.

ronaldo12

Gebruiker
Lid geworden
10 mrt 2014
Berichten
48
Hey ik heb een vraagje over het verwijderen van een regel uit een listbox.

Ik heb nu dus een listbox gevuld met een fictieve database, de gegevens van deze database worden uit een excelsheet gehaald en letterlijk gekopieerd in de listbox. Als ik echter een regel verwijder uit de excelsheet dan wordt dit automatisch aangepast in de listbox. Wat ik nu graag zou willen is dat als ik op een knop "Verwijder" klik hij de geselecteerde rij in de listbox verwijderd en daarmee ook in de excelsheet. Dus op deze manier:

t0go3n.jpg


En dan de code die ik heb achter de knop "Verwijder" is als volgt

Code:
Private Sub cmdVerwijder_Click()

    lstDatabase.RemoveItem (lstDatabase.ListIndex)

End Sub

Naam listbox is lstDatabase, met ListIndex bedoel ik de geselecteerde rijnummer.

Alvast bedankt
 
met een voorbeeldbestand waren er al andere reacties geweest.


mvg
Leo
 
Via de knop <Ga geavanceerd>. En daar zit de upload knop.
 
Bestand met desbetreffende listbox.

Ik heb het programma wat verkleind, anders kon ik het niet uploaden. Het is trouwens een oude opdracht van school die ik nu wil uitbreiden. Om het realistisch te maken moest het voor een bestaand bedrijf zijn, vandaar de opmaak. Inprincipe is het me gelukt om een regel uit de database te verwijderen, alleen gebeurt dit nu best wel traag, hoe groter de database hoe trager die zal zijn. Na het verwijderen van een werknemer hou je een lege regel over waar niks staat, de code zorgt er nu voor dat deze lege regel wordt opgevuld door de volgende regel omhoog te schuiven, en dit gebeurt dan net zolang tot alle regels zijn afgegaan. Hij doet er nu ongeveer iets van 1 min over, maar dit kan als het goed is veel praktischer, met bijv. de removeitem functie van een listbox. De code die ik nu heb staat achter de knop "Ja" van de userform controle. Ik hoop dat jullie me kunnen helpen.




Bekijk bijlage Registratie tool - data verwijderen.xlsm
 
Ik veronderstel dat een personeelsnummer uniek is per werknemer. Gebruik dit nummer om de juiste rij op te zoeken, dan heb je geen extra kolom nodig.
 
Hey stel ik kies voor de methode met een extra kolom met rijnummers, als ik het stukje code dat de regel verwijderd plak in de userform "controle", onder de knop "Ja" dan werkt het niet meer, werk je met een msgbox in de userform "VerwijderenWerknemer"dan doet die het wel. Heb je hier misschien een verklaring voor?
 
Stukje code is als volgt:
Code:
Private Sub cmdJa_Click()
verwijderrij = VerwijderenWerknemer.lstDatabase.List(lstDatabase.ListIndex, 25)

Sheets("Database medewerkers").Rows(verwijderrij).EntireRow.Delete

Controle.Hide
     
End Sub
 
Hoi,

1). Ik neem aan dat je gegevens fictief zijn, en niet zoals in het voorbeeld met meerdere zelfde personen met dezelfde gegevens.
2). Er hoeft dus niet gezocht te worden naar een rijnummer; de listindex + 2 is het rijnummer van je werkblad.
3). Omdat je met 'columnheads' werkt heb ik de 'rowsource' er maar in gelaten (normaal gebruik is 'List').
4). Gedefinieerde naam 'Database verwijderd.
 

Bijlagen

Hoi,

1). Ik neem aan dat je gegevens fictief zijn, en niet zoals in het voorbeeld met meerdere zelfde personen met dezelfde gegevens.
2). Er hoeft dus niet gezocht te worden naar een rijnummer; de listindex + 2 is het rijnummer van je werkblad.
3). Omdat je met 'columnheads' werkt heb ik de 'rowsource' er maar in gelaten (normaal gebruik is 'List').
4). Gedefinieerde naam 'Database verwijderd.

Hey je zegt dat normaal gesproken met 'List' wordt gewerkt ipv Rowsource, hoe gaat dat precies? Bij de properties zie ik namelijk geen 'List' staan.
 
Laatst bewerkt:
Code:
.list= Cells(1).CurrentRegion.Offset(1).SpecialCells(2).value
 
Hmm.. dankjewel voor je hulp, ik had nog een aantal vragen over je code die me nog niet helemaal duidelijk waren. Het gaat om de volgende code:

Code:
Private Sub cmdVerwijder_Click()
With lstDatabase
If .ListIndex > -1 Then
   Rows(.ListIndex + 2).EntireRow.Delete
    .RowSource = Cells(1).CurrentRegion.Offset(1).SpecialCells(2).Address
End If
End With

End Sub

Code:
Rows(.ListIndex + 2).EntireRow.Delete
Ik snap dat de rij van de geselecteerde regel wordt verwijderd uit je listbox en excelsheet, alleen toen ik dit deed toen kreeg je een lege regel en verder niks.. dus er ontstond een gat in de database. Heb je dit dan verholpen met de code die er na volgt?
Dus deze:

Code:
.RowSource = Cells(1).CurrentRegion.Offset(1).SpecialCells(2).Address
Cells(1) --> Hiermee wordt cells(1,1) bedoeld ?
CurrentRegion --> Deze begrijp ik niet helemaal? Hij pakt als het goed is iets van de aangrezende cellen mee ofzo?
.Offset(1) -- > je gaat 1 rij omlaag .. ?
SpecialCells(2) --> Deze zie ik voor het eerst :p
Adress -- > deze ook .. :p

Hoop dat je me kan helpen de code te begrijpen, thanks.!
 
De regel wordt uit het blad verwijderd, daarna wordt de listbox opnieuw gevuld met de data die nog in het blad is overgbleven.
Inderdaad met:
Code:
.RowSource = Cells(1).CurrentRegion.Offset(1).SpecialCells(2).Address

Cells(1) = cells(1,1) oftewel Range("A1") → cel A1.
Offset(1) of Offset(1,0) gaat inderdaad één regel naar onderen.

Ga met de cursor op een functie staan en druk F1.
Beter kan ik het niet uitleggen.
 
je bedoeld met de cursor dus bijvoorbeeld op 'Specialcells' staan en dan F1 drukken? Ik krijg wel een nieuwe "Excel help" venster, maar er wordt nergens uitgelegd wat specialcells doet.
 
Dan selecteer je het woord en druk dan F1.
 
Dan gooi je het programma 'CCleaner' er over, en de Help van Vba zou weer moeten werken als voorheen.
Ook ik doe dat na updates van Windows.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan