• 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.

75 textboxen optellen (code vereenvoudigen/inkorten)

Status
Niet open voor verdere reacties.

Andre175

Gebruiker
Lid geworden
2 feb 2018
Berichten
351
Goedemiddag.

Ik heb een werkende formule voor het optellen van 13 textboxen
In iedere textbox (TB4 t/m TB16) staat het aantal van een voorwerp.
Ieder voorwerp is een bepaald aantal punten waard (Punten van ieder voorwerp staan in een tabel (Tbl_DATA))

Bij iedere TextBox staat een Label (L4 t/m L16) met de naam van het voorwerp.
Door de naam van het voorwerp te zoeken in Tbl_Data vind ik de bijbehorende punten.

Voor ieder voorwerp moet dus het aantal x de bijbehorende punten berekend worden, en dan het totaal aantal punten van alle voorwerpen weergeven in TB3.

Ik heb de volgende code

Code:
Private Sub TB4_Change()
    
    Set ws = Worksheets("DATA")
    Set rng = [Tbl_Data]
    For j = 1 To 13
    
    Set fnd = rng.Find(what:=Me("L" & j + 3), LookIn:=xlValues, LookAt:=xlWhole)
    
    Set punt = ws.Cells(fnd.Row, 3)
    
    aantal = CDec(Val((Me("TB" & j + 3).Value)))
    If j = 1 Then Totaal1 = aantal * punt
    If j = 2 Then Totaal2 = aantal * punt
    If j = 3 Then Totaal3 = aantal * punt
    If j = 4 Then Totaal4 = aantal * punt
    If j = 5 Then Totaal5 = aantal * punt
    If j = 6 Then Totaal6 = aantal * punt
    If j = 7 Then Totaal7 = aantal * punt
    If j = 8 Then Totaal8 = aantal * punt
    If j = 9 Then Totaal9 = aantal * punt
    If j = 10 Then Totaal10 = aantal * punt
    If j = 11 Then Totaal11 = aantal * punt
    If j = 12 Then Totaal12 = aantal * punt
    If j = 13 Then Totaal13 = aantal * punt
    Next j
    
    TB3.Value = Totaal1 + Totaal2 + Totaal3 + Totaal4 + Totaal5 + Totaal6 + Totaal7 + Totaal8 + Totaal9 + Totaal10 + _
                Totaal11 + Totaal12 + Totaal13
    
    End If
End Sub

Nu is het de bedoeling dat er 75 voorwerpen ingevoerd kunnen worden....
Natuurlijk is deze code op deze manier verder uit te breiden, maar ik vermoed dat het ook simpeler kan.
Dat ik voor iedere TextBox een Change event moet schrijven ontkom ik niet aan, maar ik zie de code graag wat korter......

wie kan me op weg helpen?
 
Niet getest, maar probeer het eens zo

Code:
Private Sub TB4_Change()
Set ws = Worksheets("DATA")
Set rng = [Tbl_Data]
  For j = 1 To 13
      Set fnd = rng.Find(what:=Me("L" & j + 3), LookIn:=xlValues, LookAt:=xlWhole)
      Set punt = ws.Cells(fnd.Row, 3)
      aantal = CDec(Val((Me("TB" & j + 3).Value)))
      Totaal & j = aantal * punt
      TB3.Value = TB3.Value + Totaal & j
  Next j     
End Sub
 
Laatst bewerkt:
Met een correcte bestandsopbouw met 1 regel code.
Plaats svp je bestand.
 
sorry moest een j zijn
 
De oplossing gevonden... :D

Code:
Private Sub TB4_Change()
    
    Set ws = Worksheets("DATA")
    Set rng = [Tbl_Data]
    y = 0
    
    For j = 1 To 75
    
        Set fnd = rng.Find(what:=Me("L" & j + 3), LookIn:=xlValues, LookAt:=xlWhole)
    
        Set punt = ws.Cells(fnd.Row, 3)
    
        aantal = CDec(Val((Me("TB" & j + 3).Value)))
    
        y = y + (aantal * punt)

    Next j
    
    TB3.Value = y
    
    End If
End Sub


EDIT.... Ik begon te twijfelen of het nodig was om Set te gebruiken in regel
Code:
Set punt = ws.Cells(fnd.Row, 3)
.
Nu blijkt dat het zonder set ook werkt.

haal ik Set weg bij regel
Code:
Set fnd = rng.Find(what:=Me("L" & j + 3), LookIn:=xlValues, LookAt:=xlWhole)
Dan werkt dit niet.

Wanneer nu wel en wanneer niet Set gebruiken?
 
Laatst bewerkt:
Ik zie helemaal geen tekstvakken......

Optellen gaat dan wat lastig.

75 tekstvakken aflopen elke keer als er slechts 1 tekstvak verandert lijkt niet erg efficiënt.
 
Laatst bewerkt:
Op Page "Invoer" staan de 75 textboxen. Deze worden pas zichtbaar als er in Tabel DATA ook daadwerkelijk iets staat ingevuld in komom B.

75 tekstvakken aflopen elke keer als er slechts 1 tekstvak verandert lijkt niet erg efficiënt.
mmmm... idd overbodig... alleen de TB die wijzigt hoeft opnieuw berekend te worden
 
Zet in de labels in het userform de namen die je in je tabel heb staan.
Zet in de tag-eigenschap van ieder tekstvak het puntenaantal dat bij dat tekstvak hoort.

Bereken bij sluiting van het userform:

Code:
Sub M_snb()
   for j=3 to 76
       If Me("TB" & j) <> "" Then y = y + Me("TB" & j) * Me("TB" & j).Tag
   next
End sub

in y staat de som van alle punten * aantal in het tekstvak
 
leuk op voor een eerste keer zoiets uit te werken, maar straks wordt dit te arbeidsintensief om het geheel te onderhouden, als er straks nieuwe textboxes worden toegevoegd etc.
Ik zou toch proberen een andere manier van invoer te bedenken.
 
Kijk... weer wat geleerd.
De eigenschap TAG kende ik niet.

Wat betreft het berekenen bij sluiting van het userform ben ik met je eens dat dit de minste bewerking/rekenmomenten geeft....
Echter de mensen die er mee gaan werken hebben dan zoiets.... ik vul iets in maar er gebeurd niets.
Ik ga denk ik toch voor de optie dat voor ieder textvak een Change-event komt, zodat na iedere invoer zichtbaar is hoeveel punten er totaal is.
 
Andere manier van invoer?
hoor graag wat je in gedachten hebt Cow18
 
maak je tab "invoer" gelijkaardig aan je tab "puntenverdeling", dan kan je via een combobox vrij snel 1 van je 75 kledingstukken ingeven, gaat veel sneller dan het scrollen en dan het aantal erbij zetten.
Bovendien is het onderhoudsvriendelijker als je nieuwe kledingstukken aanmaakt of oudere verwijderd.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan