verplichte ingave teksbox

Status
Niet open voor verdere reacties.

joske13

Gebruiker
Lid geworden
15 sep 2009
Berichten
50
Goede avond.

Ik ben aan het zoeken naar een mogelijkheid om minder mogelijkheden te hebben :)

IK heb een tekstbox waarvan ik de waarde alleen wil kunnen vullen als: #,##
Ik denk dan aan waarde van 0,05 of 0,95
Ik heb wel gevonden hoe ik het maximaal aantal karakters in kan stellen, maar niet hoe ik in kan geven dat het altijd er altijd een komma in moet zitten op de 2de positie.

Bij voorbaat dank voor de geboden oplossing, want ik neem aan dat er wel iemand is die mij kan helpen.


Jos
 
Gebruik een Masked TextBox en zet de Mask property op #.##
Die punt wordt vanzelf een , als je localization in Windows op Nederlands staat.

MSK.jpg
 
Laatst bewerkt:
Dit lijkt op een oplossing :)

Alleen moet ik even bekijken hoe ik een "Masked TextBox" toe kan voegen.


Hartelijk dank.


Jos
 
Dat is afhankelijk van je Visual Studio versie maar volgens mij zit 'ie er al een tijdje in.
 
Laatst bewerkt:
Ik ben een beginner met weinig ervaring....
Visual studio?
Ik kan en zal verder zoeken. Het zegt me nu allemaal nog niet zoveel.

Jos
 
Je hebt je vraag in de Visual Basic sectie geplaatst dus ik ga er vanuit dat je Visual Studio gebruikt. De vraag nu is dus, waar werk je in? ;)
 
De vraag staat in de VBA sectie, en dat werkt echt niet met Visual Studio :). Overigens is een gemaskeerd veld een veldeigenschap, dus die moet je bij de Properties kunnen vinden.
 
Je hebt helemaal gelijk! Ik keek verkeerd :eek:
Blijft de vraag over welke VBA hij het heeft want Excel heeft standaard geen Masked TextBox.
Of Access dat heeft weet jij beter dan ik.
 
Laatst bewerkt:
...want Excel heeft standaard geen Masked TextBox.
Ik gebruik een standaard Excel 2010 uit de doos en daar heeft een tekstvak de eigenschap PasswordChar. En daarmee stel je dus je masker mee in. Niks bijzonders dus.
 
#.## lukt niet in passwordchar property, komt alleen een # te staan , doe ik iets verkeerd?
 
Een wachtwoord teken is, zoals de naam al zegt een teken. Het hekje dus. Hoe je de string verder ziet, is een kwestie van Format van het veld. Heeft niks met het passwordcharacter te maken. Of met een inputmask.
 
Ben ik weer.

Ik heb de VBA die standaard in Office 2010 (Excel) zit.
Overigens lijkt het niet met "passwordchar property" te gaan want dan zie ik geen cijfers staan, maar alleen * of # (net wat ik ingeef)

Het is mijn bedoeling dat ik alleen (bijvoorbeeld) " 0,25 " in kan geven.

Dus
1 cijfer
een komma
2 cijfers.

Verdere opties moeten niet mogelijk zijn. Dus geen punt, letters of meer of minder karakters.

Jos
 
Dan heb ik je ook begrepen, want ik dacht dat je de invoer wilde verbergen door alleen hekjes te laten zien. Wat jij wilt is inderdaad wat Demoor liet zien en dat standaard wel in Access zit: een invoermasker. In Access het dat een Input Mask, in Excel kun je de input die een gebruiker typt wel controleren door de OnChange gebeurtenis. Als een gebruiker één teken typt (cijfer natuurlijk) er gelijk een komma achter zetten. En na 4 tekens stoppen.
 
Met een eigen gemaakt maskertje kun je overigens exact maken wat je wilt hebben. Dat bestaat dan uit een paar onderdeeltjes waarvan je alleen de naam van je tekstbox hoeft te veranderen.
Code:
Dim NewString, MyString, Mask As String
Dim mQ As Variant, pos As Integer

Code:
Private Sub UserForm_Initialize()
    TextBox1.SelStart = 0
    Mask = "#,##"
End Sub

Code:
Private Sub TextBox1_Change()
    If IsNumeric(Right(TextBox1.Text, 2)) And Len(TextBox1.Text) > 4 Then
        TextBox1.Text = Left(TextBox1.Text, 4)
    Else
        mQ = TextBox1.SelStart
        MyString = TextBox1.Text
        pos = InStr(1, MyString, "#")
        If pos > 0 Then
            NewString = Left(MyString, pos - 1)
        Else
            NewString = MyString
        End If
        If Len(NewString) < 5 Then
            TextBox1.Text = NewString & Right(Mask, Len(Mask) - Len(NewString))
            TextBox1.SelStart = Len(NewString)
        End If
    End If
    If Len(TextBox1.Text) > 4 Then
        TextBox1.Text = Left(TextBox1.Text, 4)
    End If
End Sub

Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    mQ = TextBox1.SelStart
    If KeyCode = 8 Then
        TextBox1.Text = Mask
    End If
End Sub
 
Ik lig op mijn bed de laatste reactie te lezen op mijn telefoon.
Ik moet zeggen dat dit me niet helemaal duidelijk is, maar ik zal het morgen op mijn gemak bekijken.

Bedankt alweer

Jos
 
Code lezen op een telefoon lijkt mij niet de beste werkwijze :). Je kunt de volledige code zo op een willekeurig formulier plakken, waar je een tekstvak op zet. Dat krijgt standaard de naam Textbox1 en daar is de code op gebaseerd. Je kunt het formulier dus gelijk uittesten. Als je een onderbrekingspunt instelt, kun je elke regel meelopen.
 
Beste octafish, ik volg deze post met veel interesse maar is die code 1 blok of is het per codeblok de bedoeling dat per module te doen.
 
De code heb ik in één module staan; ik heb hem in blokken gesplitst voor de duidelijkheid zodat je ziet waar een procedure/functie begint en eindigt.
 
Ben ik weer.

Ik reageer wat later omdat ik een paar dagen weg ben geweest, maar nu weer met VBA aan de gang wil gaan

Ik heb de code's overgenomen.
Helaas werkt het niet zoals ik had gehoopt.
Ik ben er zeker van dat het aan mij zal liggen. Ik ben dan ook geen expert in VBA, maar heb tot nu toe wel iets gemaakt waar ze bij ons op het werk al jaren mee werken, maar nu heeft het een update nodig.

En dan loop ik tegen dingen op die ik alleen niet kan oplossen :-(

Ik stuur een bestandje mee zoals ik de code heb toegevoegd, maar helaas krijg ik een foutmelding.
En ik weet niet waar ik de oplossing zoeken moet


Bij voorbaat dank voor de geboden hulp.


Jos
 

Bijlagen

  • Map1.xlsm
    23,5 KB · Weergaven: 31
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan