GUI formulier

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Beste allen. Ik ben bezig om een GUI te maken van een formulier die ik al heb. Voor zo ver stelt het weinig voor en werkt dit gedeeltelijk.

Alle gegevens worden goed in de textboxen van het formulier gezet. Tot zover gaat het goed.

Waar ik vast loop is bij het wegschrijven van gegevens en om precies te zijn van percentages vanuit textbox10 naar een cel op een werkblad. Die cel heeft al de indeling 0,00%.

Na het laden staat er in textbox10 bijvoorbeeld 10,00%.

Ga ik nu gegevens aanpassen en ik laat het % teken achter de waarde in textbox10 staan dan krijg ik bij het wegschrijven een foutmelding: Typen komen niet overeen. Haal ik het % weg dan loopt de code door en worden er gegevens gewijzigd.

Ik mag kennelijk geen % teken gebruiken.

Deze foutmelding volgt als ik textbox10 leeg laat of als er een waarde in staat als bijvoorbeeld 10,00%.

Het laden van gegevens gaat via code:

Code:
Private Sub CommandButton1_Click()
    If ComboBox1 = vbNullString Or TextBox1 = vbNullString Or TextBox1.Text = A Then GoTo Invoer
    
    On Error GoTo Product
    
    kolnr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    it = WorksheetFunction.Match(TextBox1, Sheets("Materiaallijst").Columns(6), 0)

    TextBox2 = "Rij " & it
            
    For i = 3 To 12
        Me("textbox" & i) = Cells(it, kolnr(i - 2))
    Next
            
    TextBox9 = Format(TextBox9, "€ 0.00")
    TextBox10 = Format(TextBox10, "0.00%")
    TextBox11 = Format(TextBox11, "€ 0.00")
    TextBox12 = Format(TextBox12, "€ 0.00")
            
    Application.ActiveWindow.ScrollRow = it
                    
    Exit Sub

Het wegschrijven gaat middels de coderegel:

Code:
Private Sub CommandButton3_Click()

'On Error Resume Next

    With Sheets("Materiaallijst")
        Cells(it, 1).Resize(, 10) = Array(TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, CDbl(TextBox9),
            CDbl(TextBox10) / 100, CDbl(TextBox11), CDbl(TextBox12))
    End With
    
    MsgBox ("Gegevens zijn aangepast"), vbOKOnly, ""

End Sub

Kennelijk werkt de boel bij percentages even anders. Wat ik ook doe ik krijg niet wat ik wil krijgen.
 
Laatst bewerkt:
Het %-teken is een gereserveerd teken in de format functie en betekend dat de waarde (1e parameter) die je geeft wordt vermenigvuldigd met 100 en er een %-teken wordt geplaatst op die plek in de uitvoer. Omdat er al een %-teken in de waarde staat wordt de waarde als tekst beschouwd en dit kan niet worden vermenigvuldigd. Dat geeft dan de foutmelding dat de typen niet overeen komen.

Maak er eens dit van:
Format(TextBox10, "percent")

Je moet dan denk ik wel eerst het %-teken uit TextBox10 verwijderen. Dus:
Format(Left(TextBox10, Len(TextBox10) - 1), "percent")

Maar waarom wil je dat doen als er al een %-teken in staat?
 
Laatst bewerkt:
Dank je. Ik ga eens kijken.

Ik wil dat procent teken uit de cel op het werkblad ook meenemen in de textbox. Anders staat deze er niet in ( of ik doe iets verkeerds waardoor ik het ophef). Het heeft niets met rekenen te maken. Het rekenen gebeurd op het werkblad zelf.

Maar wel moet ik om de boel goed weg te schrijven de waarde in de textbox door 100 delen. Ik vond dit al vreemd.

Maar als ik jou nu zo begrijp kan ik dan beter het procent teken die uit de cel meekomt, verwijderen en dan via "percent"?? weer terugplaatsen?
 
Volgens je laatste regel zou het inderdaad moeten werken en hoef je dat delen door 100 ook niet meer te doen.
 
Laatst bewerkt:
Ik heb de format gewijzigd. Het procent teken komt er gewoon in. Echter zodra ik ga wijzigen dan komt er geen Procent teken in het textbox te staan. Dat is dan geen probleem, want die kan ik daarna er weer bij zetten, maar als ik dan op het werkblad kijk dan gaat het wegschrijven niet goed het wordt daar ook nog eens afgerond????

Ik gebruik nu voor het wegschrijven van deze textbox naar de cel: CDbl(TextBox10). Eerst had ik er CDbl(Textbox10 / 100).

Dus wat gaat er niet goed bij het wegschrijven en welke moet ik dan gebruiken?

Edit:

Als ik niet deel door 100 dan komt er in de cel bij bijvoorbeeld 5,60%, 560,00% te staan. Houd rekening met het feit dat de cel reeds is ingedeeld als zijnde procent met 2 decimalen aan het eind.
 
Laatst bewerkt:
Kijk ook even naar de celeigenschapen. Als je Cdbl gebruikt moet de cel wel opgemaakt zijn voor numeriek met evt. cijfers achter de komma.
Beter nog maak je de cel op als Percentage.
Bij het inlezen naar de textbox doe je dan het getal * 100 en bij het terugschrijven naar de cel deel je door 100.
Dan heb je naar het %-teken totaal geen omkijken en maak je een label achter de textbox waar een % teken in staat.
 
Laatst bewerkt:
Cel was al opgemaakt als percentage en dan met 2 decimalen.

Ik snap wat je bedoelt. Dan komt in de cel een percentage gedeeld door 100 te staan. Helaas kijk ik via een andere weg ook nog in de database. De kans op fout lezen is dan aanwezig. Het moet dus ook daarin in 1 oogopslag duidelijk zijn. Niet alleen voor mijzelf, maar ook voor 2 andere die er mee werken en 1 daarvan is zeg maar niet helemaal slim. Dit formulier is enkel om in de lijst te zoeken en te wijzigen en niet om de uiteindelijke materiaallijsten voor een project op te maken. In de volledige lijst staan zeg maar rustig duizenden artikelen. Dus vandaar dit formulier. Je zoekt je anders de k*lere.

Het procent teken vind ik netter als het in de textbox zelf staat. Noem mij pietje precies, dat mag. Vandaar dat ik graag hier een oplossing voor wil hebben tenzij het niet mogelijk is natuurlijk, want ijzer met handen breken is ook nog steeds niet zondermeer mogelijk.
 
Laatst bewerkt:
In het veld komt dan geen percentage gedeeld door 100 te staan maar het juiste percentage. Plaats anders eens een voorbeeldje.
 
In bijlage het verder uitgekleed bestandje.

Code bij wijzigen is 1234. Mag je eventueel aanpassen, want ik krijg die annuleringsknop ook niet werkend.

In tabblad: Materiaallijst staat boven aan een knop. Klik hierop en je komt in het formulier. Kies Artikelnummer TU en dan daarna kun je het artikelnummer invoeren. Klik dan op Zoeken. De rest wijst zich vanzelf. Het streepje en eventueel voorloopnullen is niet noodzakelijk. Dat wordt automatisch aangepast.
 

Bijlagen

Ik merk overigens dat ik nu ook automatisch het procentteken in de cel krijg als ik daar iets handmatig invoer. En dan heb ik het over de cel bij tester.....
 
Nog wat gewijzigd omdat ik merkte dat ik de formules in de 9e en 10e kolom overschreef op het moment dat de wijzigingen worden opgeslagen. Deze kolommen zijn dus uit de codes verwijderd. Na het wijzigen veranderd het formulier weer daar de gegevens opnieuw worden geladen. Alleen daar heb ik een ander idee bij om dat stukje in een aparte sub te plaatsen. Scheelt knip en plak werk en maakt het geheel weer overzichtelijk.

Overigens nog steeds niet helemaal werkend. Het % teken mag er nu weer niet achter staan.....

Als je wilt dan wacht ik jou antwoord wel even af. Maar zo weet je in ieder geval dat je het niet alleen doet. ;)


Code:
Private Sub CommandButton2_Click()
    Dim Code As String
    Dim Pogingen As String

Start:
    Code = "1234"
    Pogingen = InputBox("Om deze functie uit te kunnen voeren, is een wachtwoord vereist." & vbNewLine & vbNewLine & "Geef uw wachtwoord.", "Autorisatie vereist")
    
    Select Case Pogingen
        Case Is = Code
            For j = 3 To 10
                Me("Textbox" & j).Enabled = True
            Next
            
        Case Is <> Code
            MsgBox ("U heeft geen geldig wachtwoord ingevoerd." & vbNewLine & vbNewLine & "Probeer opnieuw."), vbExclamation, "Foute code"
            GoTo Start
    End Select
    
End Sub

Private Sub CommandButton3_Click()
'On Error Resume Next
    TextBox10 = Format(TextBox10, "0.00")
    
    With Sheets("Materiaallijst")
        Cells(it, 1).Resize(, 8) = Array(TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, CDbl(TextBox9), CDbl(TextBox10) / 100)
    End With
    'TextBox10 = Format(TextBox10, "percent")
    
    TextBox2 = "Rij " & it
            
    For i = 3 To 12
        Me("textbox" & i) = Cells(it, kolnr(i - 2))
    Next
            
    TextBox9 = Format(TextBox9, "€ 0.00")
    TextBox10 = Format(TextBox10, "percent")
    TextBox11 = Format(TextBox11, "€ 0.00")
    TextBox12 = Format(TextBox12, "€ 0.00")
    
    MsgBox ("Gegevens zijn aangepast en opnieuw geladen."), vbOKOnly, ""

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan