Combobox keypress

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Ik heb een code nodig om ervoor te zorgen dat in een combobox enkel de cijfers 0 - 9 en het % teken kan worden ingevoerd.

De waarden komen uit een lijst via rowsource waarin de volgende items staan: 6,00%, 21,00% en Geen.

Nu wil ik voorkomen dat er andere waarden dan dit kunnen worden ingevoerd. Ik dacht eerst aan: If Not IsNumeric(Cmb_BTW) Then.

Dit werkt, maar als het percentage teken erbij komt dan krijg ik een foutmelding.

Ik weet dat ik dan het % teken en zo weg zou moeten laten etc etc, maar dat is in eerste niet mijn bedoeling. Dit omdat ik anders weer formules moet gaan aanpassen en het wegschrijven naar een tabel en factuur weer moet aanpassen zodat er een % teken achter komt te staan.

Nu zat ik te denken aan onderstaand event.

Is dit het event wat ik dan moet gebruiken? Zo ja, welke code moet er dan in het event komen te staan?


Code:
Private Sub Cmb_BTW_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

End Sub

Nu heb ik de If Not IsNumeric(Cmb_BTW) code in het event Change staan.

Code:
Private Sub Cmb_BTW_Change()
    
    If Not IsNumeric(Cmb_BTW) Then
        MsgBox ("U kunt alleen cijfers invoeren"), vbInformation, "Combobox BTW"
        Cmb_BTW = vbNullString
    End If
    
    If Cmb_BTW <> vbNullString Then
        BTW = Left(Cmb_BTW, Len(Cmb_BTW) - 1)

    Select Case Cmb_BTW
        Case Is = "Geen"
            Tb_BTW = "0,00"
        Case Else
            Tb_BTW = Format(CDbl(Tb_SubTotaal / 100 * BTW), "0.00")
            Cmb_BTW = Format(Cmb_BTW, "0.00%")
    End Select
    
    End If
    
End Sub

Alvast bedankt
 
Laatst bewerkt:
In userform module.

Code:
Private Sub UserForm_Initialize()
 Cmb_BTW.Tag = " "
End Sub

Private Sub Cmb_BTW_Click()
If Cmb_BTW.Tag <> "" Then
    Select Case Cmb_BTW
        Case Is = "Geen"
                TB_BTW = "0,00"
        Case Else
            TB_BTW = Format(CDbl(Tb_SubTotaal), "0%")
            Cmb_BTW.Tag = ""
            Cmb_BTW = Format(CVar(Cmb_BTW), "0%")
     End Select
  Cmb_BTW.Tag = " "
 End If
End Sub

Private Sub Cmb_BTW_Keyup(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Cmb_BTW = vbNullString
End Sub
 
Beste HSV,

Bedankt voor jouw code.

Ik zie dat je het event Click hebt gebruikt. Moet ik het event Change en of Exit dan ook verwijderen of blijven deze staan?

Tevens zie ik dat jij Tag gebruikt hebt. Waarom geen Value?

Ik heb nog even geen tijd om de code te proberen. Ik hoor eerst graag van jou mbt de events.
 
Geen enkele gebeurteniscode nodig.

Code:
combobox1.type=2
combobox1.list=array("6%","21%")
 
Laatst bewerkt:
@snb,

".type = 2" geeft bij mij aan dat het de gegevenslid niet kan vinden.

@masala09,


De .Tag gebruikte ik om te voorkomen dat je code twee keer ging lopen in de 'Change" event.
Ik heb dat later gewijzigd naar een Click- event.
Dus de .Tag mag er wat mij betreft uit.
Onderstaande zet je in het userform, meer niet.

Code:
Private Sub Cmb_BTW_Click()
    Select Case Cmb_BTW
        Case Is = "Geen"
                TB_BTW = "0,00"
        Case Else
            TB_BTW = Format(CDbl(Tb_SubTotaal), "0%")
            Cmb_BTW = Format(CVar(Cmb_BTW), "0%")
     End Select
End Sub

Private Sub Cmb_BTW_Keyup(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 Cmb_BTW = vbNullString
End Sub
 
Gewoon aanpassen naar:

Code:
combobox1.style=2
combobox1.list=array("6%","21%")
 
Eentje om te onhouden snb.
Bedankt.
 
Snb, Bedankt. In feite heb ik jouw code al. Deze is alleen op een andere manier opgesteld. In de eigenschappen had ik al gekozen voor de dropdownlist en ik haal de gegevens uit een lijst die op een tabblad heb staan.

HSV.

Als ik doe hoe jij beschrijft, worden er geen berekeningen meer uitgevoerd. Kan ook wel kloppen, want er missen een aantal coderegels.

Ik zag overigens dat je in: Cmb_BTW = Format(CVar(Cmb_BTW), "0%"), CVar hebt gebruikt. Nu weet ik dat dit in feite het zelfde bereik heeft als de CDbl. Alleen de ene is voor numeriek en de andere is voor niet numerieke gegevens. Middels CVar kunnen dus beide. Echter ben ik wel nieuwsgierig waarom je dit gebruikt hebt. Vermoedelijk vanwege het % teken, maar dan nog gebeurd er niet waar ik eigenlijk om vroeg.


Wat ik nu gedaan heb is toch besloten om het % teken weg te laten in de combobox en de berekening in de code hetzelfde te laten. Het % teken laat ik nu in de betreffende cel op het tabblad via celeigenschappen er bij schrijven. De genoemde CVar heb ik weggelaten daar ik een foutmelding kreeg omdat de eigenschap Style op DropDownList stond. Deze staat nu weer op Style Combobox.

Code:
Private Sub Cmb_BTW_Change()
    
    If Cmb_BTW = vbNullString Then Exit Sub 'Uitvoeren na Invoeren voor Reset
    
     If Not IsNumeric(Cmb_BTW) Then
        MsgBox ("U kunt alleen cijfers invoeren"), vbInformation, "Combobox BTW"
        Cmb_BTW = vbNullString
    End If
    
    If Cmb_BTW <> vbNullString Then
        BTW = Left(Cmb_BTW, Len(Cmb_BTW))

    Select Case Cmb_BTW
        Case Is = "Geen"
            Tb_BTW = "0,00"
        Case Else
            Tb_BTW = Format(CDbl(Tb_SubTotaal / 100 * BTW), "0.00")
            Cmb_BTW = Format(Cmb_BTW, "0.00")
    End Select
    
    End If
    
End Sub

Private Sub Cmb_BTW_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    If Not Chk_Afsluiten Then Exit Sub

    If Cmb_BTW = vbNullString Then
        MsgBox ("U dient een keuze uit de lijst te maken"), vbInformation, "Combobox BTW"
        Cancel = True
    End If

End Sub

Echter nu kreeg ik het probleem dat na het wegschrijven naar een tabblad, de waarde in de cel door de eigenschappen van die cel (Percentage) vermenigvuldigd wordt met 100. Om dit weer aan te passen heb ik in de code voor het wegschrijven van de gegevens in het userform ervoor gekozen om een nogal kromme actie uit te voeren. Ik deel eerst via VBA en tijdens het wegschrijven de waarde van Cmb_BTW door 100. Hierdoor wordt 21 dan bij het wegschrijven: 0,21. In een doelcel op een tabblad wordt dit dan weer rechtgetrokken door de automatische vermenigvuldiging met 100 en wordt 0,21 weer 21. Hierna volgt de toevoeging van 2 decimalen en het % teken wat uiteindelijk resulteert in 21,00%. Dat dit middels een omweg gebeurd, hoef je je niet eens af te vragen.

Code:
 .Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 7) = Array(Cmb_Omschrijving, CDbl(Tb_Aantal), CDbl(Tb_Prijs), CDbl(Tb_SubTotaal), [B]CDbl(Cmb_BTW) / 100[/B], CDbl(Tb_BTW), CDbl(Tb_Factuurregel))

Ik krabbel mijzelf een beetje achter de oren. Hoewel het zo wel werkt, zet ik er toch vraagtekens bij.

Maar nu nog steeds het probleem met de waarde: "Geen".

Door de If Not IsNumeric kan ik enkel cijfers plaatsen. De tekst:"Geen" kan ik niet weglaten daar dit een Belastingtechnische eis is zodra er geen BTW hoeft te worden gerekend. Zoals bijvoorbeeld het geval bij Administratiekosten of bij Parkeerkosten. Onder andere kennen deze posten geen BTW. Wel moet ik dan het woordje Geen op de factuurregel vermelden.

Dus nogmaals Cmb_BTW mag enkel de cijfers 0 - 9 en "Geen" bevatten.

Kortom kan ik bij If Not IsNumeric(Cmb_BTW) een uitzondering meegeven zodat ook "Geen" wordt toegelaten als geldige waarde?


Belastingdienst leuker kunnen wij het niet maken, maar wel gecompliceerd.
 
Laatst bewerkt:
Code:
x2=iif(c_BTW=0,"Geen",formatpercentage(c_BTW))
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan