Data wijzigen ahv. gefilterde listbox

Status
Niet open voor verdere reacties.

JefMang

Gebruiker
Lid geworden
20 sep 2019
Berichten
22
Beste forum gebruikers,
Graag wil ik jullie hulp opnieuw inroepen voor mijn probleem. Ik ga een tabel, die tot 3000 rijen kan bevatten en 20 kolommen, inlezen in een listbox.
Via 2 comboboxen, 1 op naam en 1 opp datum, ga ik het aantal gegevens filteren en enkel de gefilterde gegevens in de listbox inlezen.
Daarna lees ik een rij van de gefilterde tabel in, in textboxen.
Hierna wil ik 1 of meerdere textboxen aanpassen en terug inlezen naar de juiste rij in de tabel.
Dit laatste de aangepaste textboxen terug inlezen lukt me niet op de juiste plaats.
 

Bijlagen

Zoiets om de keuzelijst te vullen?
Code:
  iRij = Sheets(1).Cells(1, 1).CurrentRegion.Rows.Count
  iKol = Sheets(1).Cells(1, 1).CurrentRegion.Columns.Count
    ListBox1.ColumnCount = iKol - 1
    ListBox1.List = Sheets(1).Cells(1, 1).Resize(iRij, iKol).Value
 
Beste AccessGuru, alvast bedankt voor uw antwoord.
Mijn probleem ligt echter niet bij het vullen van de keuzelijst, dat lukt me nog.
Maar wanneer ik een textbox heb aangepast zou ik de juiste rij in de tabel willen overschrijven met de aangepaste gegevens.
Zoals het programma nu is, wordt er een rij toegevoegd in de tabel met de index van de gefilterde tabel in de keuzelijst.
Dus hoe kom ik tot de juiste index ?
 
In je voorbeeldje kreeg je de keuzelijst al niet gevuld, dus ik dacht daar mee te beginnen :).
 
Door gebruik te maken van je ordernummer.

Namen Beheren, DataBodyrange van kolom A van je tabel selecteren en de naam Order meegegeven.

Code:
With Sheets("Blad1").ListObjects(1)
  'MsgBox "" & ListBox1.ListIndex
   r = Application.Match(ListBox1.Column(0),[COLOR=#ff0000] [Order][/COLOR], 0)
      If ListBox1.ListIndex > -1 And IsNumeric(r) Then .DataBodyRange(r, 1).Resize(, 9) = ar Else .ListRows.Add.Range[COLOR=#ff0000].Resize(, 14)[/COLOR] = ar
  End With

Die Resize(,14) is wat overdreven en mag verwijderd worden.
 
Hallo Harry,
Ik heb je code toegevoegd in mijn programma.
Helaas luk ik er maar niet in, waarschijnlijk door mijn te beperkte kennis, om de geselecteerde en gewijzigde rij te overschrijven.
Iedere wijziging die ik doe wordt achteraan de tabel toegevoegd.
En ik zou graag bv. de rij met order 1018 selecteren, aanpassen en op dezelfde rij in de tabel overschrijven.
 

Bijlagen

Dat stukje code wat ik schreef staat ergens in je Userform.
Verander alleen wat tussen With & End With staat.

...en niet onbelangrijk: de gedefinieerde naam 'Order'.
 
Dag Harry,
Ik apprecieer enorm je hulp, het lukt mij echter niet om het beoogde doel te realiseren.
Steeds opnieuw wordt er een rij toegevoegd aan de bestaande tabel.
Zou je aub het programma in het testbestand willen aanpassen zodat de geselecteerde rij wordt overschreven.
Zoals ik u al zei mijn kennis is hiervoor ontoerijkend.
 
Je bent alleen vergeten de eerste kolom van databodyrange de naam Order mee te geven.

Let op dat er in je bestand ineens meerdere zelfde Ordernummers voorkomen.
 
Hey Harry,
Het is me gelukt met jou hulp.
Mijn dank is groot, nu kan ik eindelijk mijn programma afwerken.
In bijlage mijn huidige testbestand.
Nogmaals dank.
 

Bijlagen

Je kunt het ook anders aanvliegen:

Zet een exacte kopie van je database in een ListBox (in het voorbeeld LB_00)
Maak die kopie onzichtbaar (.Visible=false of door het userform te verkleinen: zie voorbeeld)
In Listbox1 komt een selectie van records te staan.
De gegevens van het geselecteeerde record in Listbox1 komen in de tekstvakken 0 t/m 8 te staan.
Iedere wijziging in een textbox wordt zichtbaar in het geselecteerde record in Listbox1.
Iedere wijziging in een textbox wordt verwerkt in de onzichtbare kopie van de database in LB_00.
Dan hoef je eigenlijk maar 1 keer (bij het sluiten van het Userform) de gewijzigde kopie van de database (LB_00) in het werkblad met de database weg te schrijven.
Hierdoor is de interaktie met het werkblad minimaal: In de Userform_Initialize procedure (lezen) en de Userform_QueryClose procedure (schrijven).
Vooralsnog heb ik de knop 'opslaan' gehandhaafd, maar uiteindelijk is die overbodig.
Ook de lijst met maandnamen is overbodig, want die is ingebouwd in Excel zelf: Application.customlist
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan