• 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.
ik wil toch even terug komen op mijn vraag.
in het voorbeeldbestand werkt alles zoals het werken moet. Echter in het bestand waar ik het wil toepassen gaat er toch iets fout.

Voorbeeldbestand: Bekijk bijlage Textboxen optellen .xlsb

in het bestand waar het me niet in lukt moeten 8 boxen worden opgeteld, ik krijg daar de volgende foutmelding zodra in 1 van de boxen die opgeteld moeten worden een waarde in komt te staan.
foutmelding optellen.PNG

Toch gebruik ik dezelfde code als uit het voorbeeld bestand, uiteraard de benamingen van textboxen aangepast.
(Alle boxen die opgeteld moeten worden eindigen op "A", BedragAA, BedragBA, bedragCA....enz)
Code:
Private Sub UserForm_Initialize()

    For Each it In Controls
      If TypeName(it) = "TextBox" And InStr("A", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
      End If
    Next
FormatCurrency (y)

Klassenmodule:
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.OpgK20 = FormatCurrency(y)

End Sub


Foutmelding verwijst naar regel: If it.m_T.Text <> "" Then y = y + it.m_T.Text


kan me iemand vertellen wat ik fout doe?
 
In het plaatje gebruik je een andere Userform dan in het bestand.
Ook is er maar een textbox genaamd 'BedragA'.
 
Goedemorgen HSV

Het plaatje is idd een andere userform dan in het voorbeeldbestand.
Het bestand waar het fout in gaat , staat zo vol met namen, adressen, telefoonnummers enz, dat het bijna niet te doen is om deze "neutraal" te maken zodat ik die kan uploaden.


In het voorbeeldbestand worden de TextBoxen: BedragA, BedragB en BedragC opgeteld, vandaar de code:
Code:
    For Each it In Controls
      If TypeName(it) = "TextBox" And InStr("ABC", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
      End If
    Next
FormatCurrency (y)

In het bestand met foutmelding worden de TextBoxen: BedragAA, BedragBA, BedragCA, BedragDA.... t/m....BedragHA opgeteld, vandaar de code:

Code:
    For Each it In Controls
      If TypeName(it) = "TextBox" And InStr("A", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
      End If
    Next
FormatCurrency (y)

8 textboxen eindigend op A is niet de oorzaak van de foutmelding, heb dit ook geprobeerd met de 3 textboxen in het voorbeeldbestand.

een UF met 1 Page of MultiPage maakt toch geen verschil voor de Code?
 
Kijk eens wat m_T.Parent voor type is. Als je textvakken in een multipage staan is de parent mogelijk de multipage.
 
Het is idd een Multipage.

En in het werkend voorbeeldbestand is het geen multipage.

bij een controle toevoegen tijdens foutmelding
type = Variant/Object/Frame
 
Laatst bewerkt:
Het bestand bevat onleesbare fouten o.i.d.
 
Bedoel je dat het niet te openen is?
Ik kan het gewoon downloaden en openen


edit.....

er zaten idd koppelingen in naar andere bestanden.
die eruit gehaald
poging 2



Bekijk bijlage BS Forum.xlsb
 
Laatst bewerkt:
Goedemorgen

Naar aanleiding van de vraag van JKPieterse in #25 ben ik iets gaan proberen.
Aangezien bij een controle tijdens de foutmelding m_T.Parent als type = Variant/Object/Frame is, heb ik de Frame's eruit gehaald.
Nu ziet de opmaak van het UF er niet meer uit maar het werkt nu allemaal wel.

Hoe moet nu de code voor de klassenmodulle worden aangepast zodat de Frame's worden "uitgesloten"?

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.OpgK20 = FormatCurrency(y)

End Sub
 
Wat voor soort elementen heb je in de verzameling (Collection) 'verz' gezet ?
 
Code:
    For Each it In Controls
      If TypeName(it) = "TextBox" And InStr("A", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
      End If
    Next
FormatCurrency (y)

Zodra de textboxen in een frame staan gaat het dus mis
 
Laatst bewerkt:
Een oplossing is om aan de klasse een eigenschap toe te voegen die de userform zelf bevat. Stel dat je die eigenschap "TheForm" noemt, dan moet je die in je code doorgeven aan de klasse net zoals je de control doorgeeft:
Code:
Set verz.Item(verz.Count).TheForm = Me
In plaats van
Code:
For Each it In m_T.Parent.verz
krijg je dan:
Code:
For Each it In TheForm.verz
Niet vergeten deze in het terminate event van de klasse op nothing te zetten.
Aan je klasse voeg je toe:
Code:
Public TheForm As Object

Private Sub Class_Terminate()
    Set TheForm = Nothing
End Sub
 
Laatst bewerkt:
De foutmelding is eruit, er komt alleen geen waarde in Tb "OpgK20" waar het totaalbedrag in zou moeten komen.

In de Klassemodulle staat nu:
Code:
Public WithEvents m_T As MSForms.TextBox
Public TheForm As Object

Private Sub Class_Terminate()
    Set TheForm = Nothing
End Sub
Private Sub m_T_Change()
    y = 0
    For Each it In TheForm.verz
      If it.m_T.Text <> "" Then y = y + it.m_T.Text
   Next
   
  m_T.Parent.OpgK20 = FormatCurrency(y)

End Sub

Als ik met F8 de code Initialize doorga

Code:
Private Sub UserForm_Initialize()

    For Each it In Controls
      If TypeName(it) = "TextBox" And InStr("A", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).TheForm = Me
      End If
    Next
FormatCurrency (y)

        gr1 = Sheets("Controle_gr_evenem").Range("P3:P25")
        gr2 = Sheets("Controle_gr_evenem").Range("R3:R25")
        gr3 = Sheets("Controle_gr_evenem").Range("T3:T25")
        gr4 = Sheets("Controle_gr_evenem").Range("V3:V25")
        gr5 = Sheets("Controle_gr_evenem").Range("X3:X25")
        gr6 = Sheets("Controle_gr_evenem").Range("Z3:Z25")
        gr7 = Sheets("Controle_gr_evenem").Range("AB3:AB25")
        gr8 = Sheets("Controle_gr_evenem").Range("AD3:AD25")
        grp = Sheets("Controle_gr_evenem").Range("AF3:AF25")

'   ALLE TXT EN COMBOBOXEN LEEG MAKEN
    Dim ctrl As Control
    For Each ctrl In Me.Controls
        Select Case TypeName(ctrl)
            Case "TextBox", "ComboBox": ctrl.Value = ""
        End Select
    Next ctrl
    
    




'  #################
'  #### SCHOLEN ####
'  #################
        With LbScholen
                .ColumnHeads = False
                .List = [Tbl_Scholen].Value
                .ColumnCount = [Tbl_Scholen].CurrentRegion.Columns.Count
                
        End With '
        For j = 0 To LbScholen.ListCount - 1
            c04 = Replace(c04 & "|", "|" & LbScholen.List(j, 1) & "|", "") & LbScholen.List(j, 1)
        Next
            OpgK3.List = Split(Mid(c04, 1), "|")

'  ####################
'  ####  Kinderen  ####
'  ####################
         OpgK19 = "€ "
         OpgK20 = "€ "
        For i = 6 To 455
            If Sheets("Opgave_Kinderen").Range("B" & i) = "" Then
                OpgK0.Value = Sheets("Opgave_Kinderen").Range("A" & i).Value
                GoTo einde
            End If
        Next i
einde:
            
        With LbKinderen
                .List = [Tbl_Opg_Kind].Value
                .ColumnCount = [Tbl_Opg_Kind].CurrentRegion.Columns.Count
                .ColumnWidths = "20;100;160;100;100;100;20;20;20;100;20;20;20;20;20;20;20;20;20;20;20;20;100"
        End With
        
        OpgK8.List = Split("Ja |Nee ", "|")
        OpgK10.List = Split("Ja |Nee ", "|")
        OpgK7.List = Split("1 |2 |3 |4 |5 |6 |7 |8 |Peuters ", "|")

End Sub

komen deze gegevens bij controle naar voren

Watch : + : Me : : UfStartMulti/UfStartMulti : UfStartMulti.UserForm_Initialize
Watch : : FormatCurrency(y) : <Buiten het geldige bereik> : Empty : clsTextBox.m_T_Change
Watch : : y : <Buiten het geldige bereik> : Variant/Empty : clsTextBox.m_T_Change


Zodra ik in de listbox op een regel click

Watch : : Me : <Buiten het geldige bereik> : UfStartMulti : UfStartMulti.UserForm_Initialize
Watch : : FormatCurrency(y) : <Buiten het geldige bereik> : Empty : clsTextBox.m_T_Change
Watch : : y : <Buiten het geldige bereik> : Variant/Empty : clsTextBox.m_T_Change
Watch : : BedragAA : "€ 1,00" : Object/TextBox : UfStartMulti.bedragAA_Change



Er gaat iets niet zoals het zou moeten gaan.....ik leer steeds meer maar hier kom ik (nog) niet uit.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan