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

een aantal Textboxen optellen

Status
Niet open voor verdere reacties.

Andre175

Gebruiker
Lid geworden
2 feb 2018
Berichten
351
Goedemiddag.

Ik heb een UF met meerdere textboxen.
Nu wil ik graag 8 van de tig textboxen optellen en weergeven in een textbox.
Het wil me nog niet lukken.

in dit Forum vond ik wel een mooi voorbeeld wat werkt met een klassemodule.

In dit voorbeeld worden 3 van de 4 textboxen opgeteld, en het resultaat komt in de 4e textbox.
Ik heb er 4 textboxen aan toegevoegd en die met een tekst gevuld.

En nu gaat het mis, waarschijlijk omdat er nu textboxen in het UF staan die tekst bevatten ipv waarden.
Foutmelding: Type komen niet overeen

wie kan/wil me helpen dit probleem op te lossen?

bvd André



Bekijk bijlage Textboxen optellen.xlsb
 
André,

probeer dit eens:
Code:
      If TypeName(ctl) = "TextBox" And ctl.Name <> "TextBox4" And ctl <> "" [COLOR="#FF0000"]And IsNumeric(ctl)[/COLOR] Then tel = tel + ctl.Value
 
goedenavond SjonR.....

de foutmelding is met jouw inbreng wel verdwenen, het is helaas nog niet de juiste oplossing.

In textbox4 komt nu de waarde van textbox 3 te staan ipv dat de waardes van tb1 2 en 3 opgeteld worden.


Is het niet makkelijker om specifiek aan te geven voor welke textboxen de klassenmodule bedoeld is ipv bepaalde textboxen uit te sluiten?
Code:
Private Sub TxtBx_Change()
Dim ctl As Control
 [COLOR="#FF0000"]If TxtBx.Name <> "TextBox4"[/COLOR] Then
   tel = 0
   For Each ctl In UserForm1.Controls
      If TypeName(ctl) = "TextBox" And ctl.Name <> "TextBox4" And ctl <> "" Then tel = tel + ctl.Value
  Next ctl
  UserForm1.TextBox4 = tel
End If
End Sub


Dus de rood gekleurde text aanpassen?
Iets van.....
Code:
Private Sub TxtBx_Change()
Dim ctl As Control
[COLOR="#FF0000"] If TxtBx.Name = "TextBox1" Or "TextBox2" Or "TextBox3"[/COLOR] Then
   tel = 0
   For Each ctl In UserForm1.Controls
      If TypeName(ctl) = "TextBox" And ctl.Name <> "TextBox4" And ctl <> "" Then tel = tel + ctl.Value
  Next ctl
  UserForm1.TextBox4 = tel
End If
End Sub

Er zal dan wel meer veranderd moeten worden want zo werkt het iig niet....:confused:

André
 
zie
 

Bijlagen

  • __Textboxen optellen.xlsb
    21,4 KB · Weergaven: 91
goedemorgen

Voor het optellen werkt het idd ook op deze manier SNB.
Maar het lost mijn vraag niet op.

Op deze manier worden alle textboxen opgeteld, ook Tb 5, 6,7, en 8 (ipv alleen Tb 1,2, en 3
En zodra er ergens een tekst in komt, krijgen we een foutmelding.


André
 
Zoiets dan?
 

Bijlagen

  • Textboxen optellen.xlsb
    24,3 KB · Weergaven: 56
Dan moet je zorgen dat tekstvakken waarin alleen tekst komt te staan niet aan de verzameling 'verz' worden toegevoegd.
Als je daarover (welke tektvakken) geen informatie verstrekt....
Dat moet je daarom zelf doen.

Als alleen tekstvakken 1 t/m 3 moeten worden opgeteld:

Code:
Public verz As New Collection
Private Sub UserForm_Initialize()
  For Each it In Controls
    If TypeName(it) = "TextBox" And InStr("123", Right(it.Name, 1)) Then
       verz.Add New clsTextBox
       Set verz.Item(verz.Count).m_T = it
    End If
  Next
End Sub
 
Laatst bewerkt:
Hier komen we wel verder mee :thumb:

Nu alleen nog Textbox 4 in Format €0,00.

Ik heb al 1 en ander geprobeerd.
TextBox4 = Format(TextBox4, "€ #,##0.00") in het event Change of AfterUpdate werkt niet

Als ik onderstaande code in de klassenmodule doe, loopt bij mij Excel vast.:(

Code:
Option Explicit
Public WithEvents TxtBx As MSForms.TextBox
Private tel As Double

Private Sub TxtBx_Change()
Dim ctl As Control
   tel = 0
   For Each ctl In UserForm1.Controls
        If TypeName(ctl) = "TextBox" And ctl.Name <> "TextBox4" And ctl.Tag = "Tellen" And IsNumeric(ctl.Value) Then tel = tel + ctl.Value
  Next ctl
  UserForm1.TextBox4 = tel
    [B]UserForm1.TextBox4 = Format(UserForm1.TextBox4, "€ #,##0.00")[/B]
End Sub



André
 
Dan heb je het verkeerde voorbeeld gebruikt. Lees #7 nog eens goed door.
 
oeps...excusses

#7 had ik nog niet eens gezien


Ik had mijn vraagstelling in #1 iets anders kunnen formuleren idd.
in #3 wordt het toch wel duidelijk dat TB 1,2 en 3 opgeteld moeten worden en de rest niet.

het optellen lukt nu, alleen de opmaak van Tb4 nu nog.
Iemand een idee waar de code TextBox4 = Format(TextBox4, "€ #,##0.00") zou moeten staan?


(ik zal uw oplossing zo ook proberen SNB....klein misverstand van mijn kant)
André
 
Laatst bewerkt:
Het zou al een stuk minder rommelig worden als je de textboxes handige namen zou geven. Dan kan je testen op het begin van de naam. Overigens zou ik een berekende waarde in een Label zetten, dan heb je het hele probleem met testen of iets een tekstvak is niet eens.
 
berekende waarde in een label....
Zo bekend met VBA ben ik nu ook weer niet dat ik daar op zou komen.

Labels heb ik tot nu toe alleen gebruikt voor een stukje tekst bij een textbox zodat de gebruiker ziet waarvoor de box bedoeld is.

Ook dit zal ik eens gaan proberen straks.


bedankt voor de inbreng.
 
Gebruik in de Klasse:

Code:
Public WithEvents m_T As MSForms.TextBox

Private Sub m_T_Change()
    y = 0
    For Each it In m_T.Parent.verz
      If it.m_T.Text <> "" Then y = y + it.m_T.Text
   Next
   m_T.Parent.Caption = FormatCurrency(y)
End Sub
 
Iedereen bedankt voor de inbreng, Ik heb het nu uit, zoals ik in gedachten had het te willen maken.

Zal voor het archief het bestandje bijvoegen.
heb weer het 1 en ander geleerd.


@jkPieterse, dat met die labels ga ik me zeker een keer in verdiepen.



Bekijk bijlage Textboxen optellen .xlsb
 
Ik wil toch nog even graag een kleine uitleg vragen over de code die SNB gaf.
Ik probeer de code toe te passen in het bestand waar het voor mij bedoeld is.

Hier wil ik 8 textboxen optellen. Heb ze nu de naam "Bedrag1" t/m Bedrag8" gegeven
is dit dan de juiste code?

Code:
Private Sub UserForm_Initialize()

    For Each it In Controls
      If TypeName(it) = "[COLOR="#FF0000"]Textbox[/COLOR]" And InStr("12345678", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
      End If
    Next

of moet Textbox Bedrag zijn?
Typename is toch het type box? dus een Textbox?


("12345678", Right(it.Name, 1))

Right - >rechts naast naam
, 1 - >1 teken, dus een 1 of 2 of 3 of.....
heb ik dit zo goed?


het totale bedrag komt in textbox met de naam "OpgK20"
Dan komt in de klassenmodule toch....

Public WithEvents m_T As MSForms.TextBox
Code:
Private Sub m_T_Change()
    y = 0
    For Each it In m_T.Parent.verz
      If it.m_T.Text <> "" Then y = y + it.m_T.Text
   Next
   
  m_T.Parent.OpgK20 = y

End Sub


heb ik het zo goed begrepen?
 
Code:
Private Sub UserForm_Initialize()
    For Each it In Controls
      If TypeName(it) = "Text[B][COLOR="#FF0000"]B[/COLOR][/B]ox" And InStr("12345678", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
      End If
    Next
End sub

markeer in de VBEditor TypeName, druk op F1 en lees. (dat geldt ook voor overige VBA begrippen)

Je 'Klasse' code is goed behalve
Code:
formatcurrency(y)
 
Laatst bewerkt:
Oke... een hoofdletter, dat is duidelijk.
Die over het hoofd gezien.
Kwam er al achter dat wanneer iets tussen "" staat de Hoofdletters niet automatisch gaan....


maar wat bedoel je met
Je 'Klasse' code is goed behalve
Code:
formatcurrency(y)



ik zie dit nergens terug, ook niet in het werkend bestand wat ik in #15 toegevoegd heb.
 
Om dat soort fouten te voorkomen kan je voor de zekerheid dit doen:
Code:
If LCase(TypeName(it)) = "textbox" And InStr("12345678", Right(it.Name, 1)) Then
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan