Waarde als percentage wegschrijven naar werkblad

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Onderstaande code gebruik ik om de waarden uit de textboxen juist weg te schrijven naar een werkblad. Waar ik een probleempje mee heb is de waarde van combobox2.

Op de wijze hieronder werkt het. Echter dan staat er in de cel i.p.v. 21%, 0,21. Dit kan ik wel goed krijgen door er CDbl(Combox2) van te maken. Dan wordt de waarde wel met het percentage teken in de cel weergegeven en dus als 21,00%. Nu wil ik hier voor het mooie gewoon 21% van maken. Ook dit heb ik min of meer wel gevonden alleen dan wordt het percentage afgerond. Bijvoorbeeld 21,50% wordt dan 22%. Ik heb dit via tabblad Start, Getal gedaan en dan met het percentage teken. (Sorry dat ik de juist benaming niet helemaal weet voor de onderdelen van het tabblad.)

Ga ik een stukje verder en dan volgens een niet geheel naar mijn zin zijnde oplossing die ik gevonden heb, dan krijg ik de foutmelding: Typen komen niet overeen, zodra ik de keuze: Geen, maak. Ik heb namelijk 3 keuzes. 6%, 21% en Geen (Voor bijvoorbeeld bij administratiekosten of parkeerkosten) Dit zijn namelijk geen diensten die BTW belast moeten worden.

Is er hier een andere oplossing voor. Ik heb al geprobeerd te zoeken via F1, maar kan niets vinden wat over percentages gaat.

Code:
.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 7) = Array(ComboBox1, CDbl(TextBox2), CDbl(TextBox3), CDbl(TextBox4), ComboBox2, CDbl(TextBox5), CDbl(TextBox1))

Als laatste wil ik in combobox2 de keuze kunnen maken met 6% (wordt nu 0,06), 21% (wordt nu 0,21).
 
De private sub die de berekeningen uitvoeren over de textboxen is:

Code:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    If TextBox4 <> vbNullString Then TextBox4 = Format(CDbl(TextBox2 * TextBox3), "0.00")
    If ComboBox2 <> vbNullString Then TextBox5 = Format(CDbl(TextBox4 * ComboBox2), "0.00")
    
End Sub

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    TextBox3 = Format(TextBox3, "0.00")
    TextBox4 = Format(CDbl(TextBox2 * TextBox3), "0.00")
    If ComboBox2 <> vbNullString Then TextBox5 = Format(CDbl(TextBox4 * ComboBox2), "0.00")
    
End Sub

Private Sub ComboBox2_Change()
    
    Select Case ComboBox2
        Case Is = "Geen"
            TextBox5 = "0,00"
        Case Else
            TextBox5 = Format(CDbl(TextBox4 * ComboBox2), "0.00")
    End Select
   
End Sub

Is wellicht handig om te weten.
 
Oke na veel puzzelen klopt het zo volgens mij wel. Tenminste het werkt.

Als ik het goed heb onthouden kon ik doordat ik de Dim buiten de subroutines heb geplaatst, deze in alle routines gebruiken. Dit heb ik gedaan. Echter dit is voor mij wel de eerste keer. Hierom vraag ik mij toch af of ik de variabele die bij de declaratie hoort, voor het overzicht, beter anders kan indelen in bijvoorbeeld een aparte subroutine. Nu staat de variabele in private sub combobox2_Change().

Code:
Dim PERC() As String 'PERC = Percentage
--------------------------------------------------------------------

Private Sub UserForm_Initialize()
    
    Label2.Caption = " " & Frm_FactuurMaken1.ComboBox1
    Label4.Caption = " " & Frm_FactuurMaken1.TextBox10
    
    Select Case Frm_FactuurMaken1.ComboBox4.Value
        Case Is = "Ja"
            Label6.Caption = " Verlegd"
        Case Is = "Nee"
            Label6.Caption = " Niet verlegd"
    End Select
    
    Label8.Caption = " " & Frm_FactuurMaken1.ComboBox3
    Label10.Caption = " " & Frm_FactuurMaken1.TextBox11
    Label12.Caption = " " & Frm_FactuurMaken1.TextBox12
    Label13.Caption = "U kunt nog 8 factuurregels invoeren"
    TextBox1.Value = "1"
    TextBox6.Value = "8"
    ComboBox1.RowSource = "Omschrijving"
    ComboBox2.RowSource = "BTW"
    
End Sub

Private Sub ComboBox1_Change()

    TextBox2.SetFocus
    
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    On Error Resume Next
    
    If TextBox2.Value = vbNullString Or "" Then
        MsgBox ("U dient een waarde in te voeren")
        TextBox2.SetFocus
    End If
    
    If TextBox4.Value <> vbNullString Then TextBox4 = Format(CDbl(TextBox2 * TextBox3), "0.00")
    If ComboBox2.Value <> vbNullString Then TextBox5 = Format(CDbl(TextBox4 / 100 * PERC(0)), "0.00")
    
End Sub

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    On Error Resume Next
    
    TextBox3.Value = Format(TextBox3, "0.00")
    TextBox4.Value = Format(CDbl(TextBox2 * TextBox3), "0.00")
    If ComboBox2.Value <> vbNullString Then TextBox5 = Format(CDbl(TextBox4 / 100 * PERC(0)), "0.00")
    
End Sub

Private Sub ComboBox2_Change()

    PERC = Split(ComboBox2.Value, "%")
    
    Select Case ComboBox2.Value
        Case Is = "Geen"
            TextBox5.Value = "0,00"
        Case Is = vbNullString
            Exit Sub
        Case Else
            TextBox5.Value = Format(CDbl(TextBox4.Value / 100 * PERC(0)), "0.00") 'BTW bedrag uitrekenen
            ComboBox2.Value = Format(ComboBox2.Value, "0.00%")
    End Select
    
End Sub

Nu is mij ook verteld dat ik bij de TextBoxen en ComboBoxen beter ook de aanvulling: .Value kan plaatsen daar het de code stabieler zou maken. Nu heb ik hier nooit enig probleem mee ondervonden, maar delen jullie dit advies?

Het "probleem" waarde als percentage wegschrijven" heb ik opgelost door het blad te beveiligen. Iets wat in het samengevoegd bestand toch wel gebeurd. Alleen tja..... wel vraag ik mij nog steeds af, hoe ik het anders kan oplossen. Dan weet ik dat in het vervolg als ik geen bladen aanmaak die beveiligd worden.
 
Laatst bewerkt:
Een paar kleinigheden door het grote niet meer te overzien? Dit omdat ik geen antwoord krijg op een paar kleine vraagjes in bericht 3.
 
Masala09

Over kleine en grote problemen:
Je maakt gebruik van comboboxen en andere elementen die gegevens tonen op een formulier.
Dit wil zeggen dat alleen de gegevens op het formulier van belang is, wat maakt het uit of Excel op het werkblad
de getallen wegschrijft als 21% of 0,21? Totaal irrelevant zou ik zeggen.
Houd goed in de gaten of je het nu hebt over data die je presenteert of data die je 'alleen maar' opslaat.

Textboxen, comboboxen en andere controls hebben verschillende methoden en eigenschappen, een van deze eigenschappen
is de standaard eigenschap die wordt gebruikt als er geen andere wordt ingevuld, voor textboxen en comboboxen is dit de
eigenschap .Value. Het maakt dus niets uit of je hem wel of niet gebruikt, als je dat niet doet wordt hij toch aangenomen.
Persoonlijk vind ik wel dat je hem op moet nemen, maar dat is meer uit hoofde van volledigheid.
Waarom het percentage wegschrijven opgelost wordt door het blad te beveiligen is mij een groot raadsel.
Wel weet ik waarom je geen reacties krijgt, heel simpel, er zit geen bestand bij en wij weigeren gewoon om het voor je te
bouwen zodat we je codes kunnen testen.

Veel Succes.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan