tekstvak vullen uit berekening keuzelijst

Status
Niet open voor verdere reacties.

Resurrection

Gebruiker
Lid geworden
7 jan 2012
Berichten
7
Hallo hallo,

Ik zit wederom weer met een klein probleempje... Ik weet dat ik nogal nieuw ben hier, maar ik hoop dat jullie mij toch verder kunnen helpen. Ik probeer namelijk vanuit een keuzelijst een tekstvak te vullen met het totaal van de keuzelijst.

Er staan dus X bedragen per artikel in... en die vormen samen een subtotaal. In de keuzelijst staan 5 kolommen. De 5de is een berekening van het aantal artikelen * prijs per stuk. Ik heb nu dus in het tekstvak onder de keuzelijst het totaal van de artikelen nodig (Optelling van kolom 5, de hoeveelheid artikelen die hier in staat is dus variabel). De gegevens in de keuzelijst worden dus per klant bepaald, dus ik heb helaas geen hele tabel waar ik een complete kolom van kan berekenen. (Dan was het niet zo'n probleem geweest...)

Ik ben zelf al een paar uur aan het stoeien geweest met onderstaande code, maar ik kom er niet uit. Is er iets wat ik over het hoofd zie??? Of is er wellicht een betere oplossing?

Groet,

Rick


Code:
Private Sub Form_Load()

Dim I As Integer
Dim J As Integer

J = Keuzelijst3.ListCount - 1
subTotaal = 0

For I = 0 To J
    subTotaal = subTotaal + Keuzelijst3.Column(4, I)
Next I

subTotaal = Format(subTotaal, "currency")

Me.Tekst28 = subTotaal
 
Laatst bewerkt:
Zowiezo is je insteek verkeerd, want je controleert niet of er waarden zijn geselecteerd.

Code:
Private Sub lstPrijslijst_AfterUpdate()
Dim i As Integer
Dim subTotaal As Double
Dim ctl As Control

    subTotaal = 0
    Set ctl = Me.lstPrijslijst
    
    For i = 0 To ctl.ListCount - 1
        If ctl.Selected(i) Then subTotaal = subTotaal + ctl.Column(4, i)
    Next i
    
    Me.txtTotaal = subTotaal
End Sub
 
Laatst bewerkt:
Bedankt voor je snelle reactie!

Ik kan de code nog even niet zelf gebruiken (Ik zit op een ander systeem), maar wat ik er uit begrijp is dat een selectie in de keuzelijst verplicht is? (Sorry het is voor mij allemaal nogal nieuw ;) )

Het is dus niet mogelijk om hem "gewoon" naar de waardes in de keuzelijst te laten kijken en deze te berekenen? (Het is namelijk de bedoeling dat het meteen berekend wordt bij het laden van het formulier...)

Of bestaat er toevallig een soort "select all" functie in de keuzelijst zodat ik het kan forceren?

BVD :)

Rick

Update:
Het zou dus moeten kunnen op deze manier? (Met multiselect op extended)

Code:
Private Sub lstPrijslijst_AfterUpdate()
Dim i As Integer
Dim j As Integer
Dim subTotaal As Double
Dim ctl As Control
    
    For j = 0 To ctl.ListCount - 1
    Me!lstPrijstlijst.Selected(j)
    Next j

    subTotaal = 0
    Set ctl = Me.lstPrijslijst
    
    For i = 0 To ctl.ListCount - 1
        If ctl.Selected(i) Then subTotaal = subTotaal + ctl.Column(4, i)
    Next i
    
    Me.txtTotaal = subTotaal
End Sub
 
Laatst bewerkt:
Waarom zou je een keuzelijst alle mogelijkheden laten optellen? Maar het kan uiteraard wel, ongeveer met de code die je zelf al hebt gemaakt.

Code:
Function ListVullen()
Dim i As Integer
Dim subTotaal As Double
Dim ctl As Control, varItem As Variant

    subTotaal = 0
    Set ctl = Me.lstPrijslijst
    
    For i = 0 To ctl.ListCount - 1
        On Error Resume Next
        subTotaal = subTotaal + ctl.Column(4, i)
    Next i
    
    Me.txtTotaal = subTotaal

End Function
 
Super... ik ga het straks gelijk proberen :)

De reden is dat ik in de keuzelijst de opsomming maak van de artikelen die bij een opdracht gebruikt zijn. Ik heb hier 2 keuzelijsten naast elkaar staan. De een voor uitgevoerde werkzaamheden, de andere voor gebruikte artikelen.

In mijn use case willen ze een subtotaal per artikellijst en per uitgevoerde werkzaamheden hebben. Deze zijn echter volledig variabel... de een kan maar zo 2 artikelen hebben de ander 10... echter de info wordt uit twee verschillende tabellen gehaald. De 5de kolom is dan ook opgebouwd uit een SQL statement om het totaal te berekenen. (Tabel1.aantal * Tabel2.prijs) AS TotaalArtikel)). Er zit dus al een uitgebreidde voorselectie voor de keuzelijst.

De keuzelijst heb ik dus gekozen omdat dit op een relatief klein oppervlak veel informatie kan laten zien op een overzichtelijke manier. Dit in tegenstelling tot een doorlopend formulier. Dit was op zich ook een optie, maar dan zou ik alweer 2 subformulieren nodig hebben om alles op 1 formulier te krijgen. De keuze is dus vooral GUI matig, aangezien het als controle wordt gebruikt voordat de daadwerkelijk factuur wordt afgedrukt.

En daarnaast zoals ik al zei, ik ben relatief nieuw op dit gebied, dus wellicht is dit niet de meest handige oplossing, maar ik wist dat het mogelijk moest zijn. Dus ja... het zou inderdaad heel goed kunnen dat ik veels te ingewikkeld doe. :o

Neemt niet weg dat ik het geweldig vindt wat je allemaal doet op dit forum, ik heb o.a. door het forum door te zoeken al veel aan je antwoorden op andere vragen gehad. :)

Groet,

Rick
 
Waarvoor dank!
Ik gebruik ook wel keuzelijsten om overzichten te laten zien; de keuzelijst wordt dan gevuld met de waarden die bij een bepaald hoofdrecord horen. Want inderdaad: een keuzelijst is relatief bescheiden op een formulier, daar waar een subformulier meer plek in beslag neemt. Bovendien kun je met keuzelijsten makkelijk waarden verplaatsen. Kan ook wel eens handig zijn! Dus je hoort mij niet zeggen dat je verkeerd bezig bent ;)
 
It works like a charm :D

Echter ik krijg hem niet zo dat hij het automatisch doet... als ik hem bij form_load() zet onder mijn SQL code voor de invulling van de keuzelijsten dan doet hij het niet, maar ik heb nu maar gewoon een knop eronder gezet die de berekening doet en dat werkt wel. Das voldoende voor mijn doeleinde :)

Nogmaals dank
 
Je moet de code niet bij Load zetten, want dan hangen er nog geen gegevens in het formulier. Gebruik dus <Bij Aanwijzen> (<OnCurrent>).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan