Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Werken met een invoermasker  (gelezen 11080 keer)

0 leden en 1 gast bekijken dit topic.

Offline cladon

  • Volledig lid
  • **
  • Berichten: 246
  • Geslacht: Man
Werken met een invoermasker
« Gepost op: 18 februari 2007, 21:21:20 »
Weet iemand een manier om in een excelformulier (vba) te werken met een invoermasker zoals mogelijk is in access.

Wat ik zou willen is dat men 5.5 inbrengt als 5.5 en niet als 5,5
Windows 10 Home   NLD 64bit,
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3401
P8B75-M LE
Intel(R) HD Graphics 4000 3072MB 1920 x 1080
VIA HD Audio
C:\ NTFS 237,25GB 135,35GB 15 293MB
AV: Kaspersky
FW: Windows 10

Offline Kezze

  • Nieuw lid
  • Berichten: 4
  • Geslacht: Man
  • Aliquando et insanire jucundum est
Re: Werken met een invoermasker
« Reactie #1 Gepost op: 21 februari 2007, 09:05:09 »
ik veronderstel dat je in je formulier werkt met een TextBox.  De enige manier die ik ken om dit te bekomen is een procedure te maken die reageert op het KeyPress
event van deze textbox.  Op deze manier kun je de input filteren en gepast reageren als er een foutieve key wordt gedrukt.
Hier is the code

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If Not (KeyAscii = 46) And Not ((KeyAscii >= Asc("0") And KeyAscii <= Asc("9"))) Then
    KeyAscii = 0
    Beep
End If

End Sub
Standaard emailprogramma: Office Outlook
Standaard Operating System: Windows 2K
Standaard Browser:Internet Explorer 6

Offline droedel

  • Volledig lid
  • **
  • Berichten: 116
  • Oplossing.be
Re: Werken met een invoermasker
« Reactie #2 Gepost op: 22 februari 2007, 20:20:21 »
Cladon

Is het je bedoeling om een decimaal getal in te vullen, of is het een gegeven waarmee niet moet gerekend worden?
In dit laatste geval plaats je een" ' "voor je "getal" en gebruik je het punt op het 'lettergedeelte' van het toetsenbord als decimaal teken.
In het andere geval kan je het punt op het numeriek bord (dat afgedrukt wordt als een komma) veranderen in een echt punt via : extra\opties\internationaal\decimaalteken. hier vul je dan het punt op het lettergedeelte van het toetsenbord in, en sluit af met OK. Nu wordt het punt van het numeriek bord weergegeven als een echt punt, en niet meer als een komma.
Misschien is heel deze uitleg naast de kwestie en heb ik je vraag verkeerd begrepen. Ik hoop dat dan een ander je een goede en juiste oplossing kan geven.
Vista Home Premium, 1022 MB Ram, Intel Core 2 CPU 6400 @2.13Ghz

Offline ceasar

  • Ervaren lid
  • ***
  • Berichten: 293
  • Geslacht: Man
  • de soep eten als ze heet is
Re: Werken met een invoermasker
« Reactie #3 Gepost op: 23 februari 2007, 08:15:58 »

Cladon,

je kan waarschijnlijk iets doen met volgende VBA Fucntion :

Function NumKomma(inhoud)
    inhoud2 = ""
    lengte = Len(inhoud)
    For i = 1 To lengte
        If Mid(inhoud, i, 1) <> "," Then
            inhoud2 = inhoud2 + Mid(inhoud, i, 1)
        Else
             inhoud2 = inhoud2 + "."
        End If
    Next
    NumKomma = Val(inhoud2)
End Function

succes

JC

 8)
Windows 10 Pro   NLD 64bit
Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz 3901
Z77X-UP5 TH-CF
AMD Radeon HD 7900 Series 4095MB 1024 x 768
Realtek High Definition Audio
Nr: 1 Model: WDC WD10 EARX-00N0YB0 SCSI Disk Device
Nr: 2 Model: INTEL SSDSC2CT120A3
C:\ NTFS 111,01GB 1,06GB 32 720MB
AV: Geen antivirus geïnstalleerd
FW: Windows Firewal Enabled: True

Offline cladon

  • Volledig lid
  • **
  • Berichten: 246
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #4 Gepost op: 24 februari 2007, 00:30:14 »
Het is de bedoeling een getal in te geven waarmee men moet gaan rekenen. Wanneer het een decimaal getal is dan moet er een controle zijn op het decimaal teken. Ik wil dat dit decimaal teken altijd een (punt) is. Dit ongeacht de instelling van Excel of de systeeminstelling van de computer.

Ik ben momenteel nog niet in de testfase om te achterhalen of excel problemen heeft met een mix aan decimalen getallen met een (punt) of een (komma). Vandaar het idee van het "invoermasker" waar je oplegt hoe een getal ingegeven moet worden.
Windows 10 Home   NLD 64bit,
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3401
P8B75-M LE
Intel(R) HD Graphics 4000 3072MB 1920 x 1080
VIA HD Audio
C:\ NTFS 237,25GB 135,35GB 15 293MB
AV: Kaspersky
FW: Windows 10

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Werken met een invoermasker
« Reactie #5 Gepost op: 26 februari 2007, 23:02:34 »
Cladon, volgens mij is de europese standaard voor een scheidingsteken bij decimalen een komma! Als je in Excel dus wilt gaan rekenen met de invoer van je formulier zal je er voor moeten zorgen dat er JUIST een komma ingetikt wordt! Anders ziet Excel de invoer als een 'tekst' en niet als een 'nummer'...

Bij de oplossingen van de andere oplossers krijg je er ook nog eentje van mij... ;D
Plaats deze code in de code-listing van je formulier Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If InStr(TextBox1.Value, ".") Then
    'kies òf voor dit gedeelte...
        MsgBox "Getal bevat een decimaalpunt ipv een komma!" & Chr(13) & Chr(13) & _
                "Pas het getal aan..."
        Cancel = True   'zorgt ervoor dat de focus op de textbox blijft!
        TextBox1.Value = ""
    '...òf voor deze... (dit vind ik zelf mooier!)
'        MsgBox "Getal bevat een decimaalpunt ipv een komma!" & Chr(13) & Chr(13) & _
'                "Het getal wordt aangepast..."
'        TextBox1.Value = Replace(TextBox1.Value, ".", ",")
    End If
End Sub

Groet, Leo
______________________________

Groet, Leo

Offline cladon

  • Volledig lid
  • **
  • Berichten: 246
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #6 Gepost op: 27 februari 2007, 19:50:53 »
Citaat
Cladon, volgens mij is de europese standaard voor een scheidingsteken bij decimalen een komma! Als je in Excel dus wilt gaan rekenen met de invoer van je formulier zal je er voor moeten zorgen dat er JUIST een komma ingetikt wordt! Anders ziet Excel de invoer als een 'tekst' en niet als een 'nummer'...

dit kan je instellen in Excel via Extra - Opties - Internationaal -- scheidingsteken van systeem gebruiken.

en je weet mensen van het onderwijs dan altijd de dingen anders zij moeten zich houden aan de BIN-Normen waarin dat een komma en punt moet zijn en het cijfergroeperingssymbool een spatie moet zijn.

Via configuratie - Landsinstellingen kan je dit laatste instellen. je laatste voorbeeld van msgbox is inderdaad beter.
Windows 10 Home   NLD 64bit,
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3401
P8B75-M LE
Intel(R) HD Graphics 4000 3072MB 1920 x 1080
VIA HD Audio
C:\ NTFS 237,25GB 135,35GB 15 293MB
AV: Kaspersky
FW: Windows 10

Offline cladon

  • Volledig lid
  • **
  • Berichten: 246
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #7 Gepost op: 21 mei 2007, 01:10:45 »
Erik - wat is jou ervaring hiermee?
Windows 10 Home   NLD 64bit,
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3401
P8B75-M LE
Intel(R) HD Graphics 4000 3072MB 1920 x 1080
VIA HD Audio
C:\ NTFS 237,25GB 135,35GB 15 293MB
AV: Kaspersky
FW: Windows 10

Offline dhaeyer

  • Volledig lid
  • **
  • Berichten: 104
  • Oplossing.be
Re: Werken met een invoermasker
« Reactie #8 Gepost op: 21 mei 2007, 12:58:38 »
Hallo Cladon,
de BIN-normen in het onderwijs vragen juist een komma en géén punt als decimaalteken. Zie hiervoor oa:
"Rapporteren: voorschriften en nuttige wenken" (ISBN 90 6858 644 0), een uitgave van Licap speciaal voor het vrij onderwijs.

mvg
Dirk
Win XP - IE 6.0 - Office 2003 - Frontpage

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #9 Gepost op: 21 mei 2007, 14:53:46 »
Hallo,

Er zijn diverse oplossingen mogelijk naargelang de behoeften. Alle hebben ze hun voor- en nadelen.
werken met 1 textbox
1. foutieve invoer meteen voorkomen
(invoer indien nodig corrigeren, eventeel formatteren)
2. foutieve invoer melden bij verlaten textbox
(invoer indien nodig corrigeren, eventeel formatteren)
3. foutieve invoer melden bij klik op OK
Gescheiden invoer
Dit is: werken met 2 textboxen. Ertussen staat een label met een komma of punt
Hiermee kan je heel goed de invoer "sturen" zoals je wil. Mijn (facturatie)programma's gebruiken meestal deze invoermethode. Het heeft iets meer code nodig, maar ik heb nog nooit een klant aan de lijn gehad die problemen kreeg door verwarring met comma of punt.

Welke methode wil je toepassen?

beste groeten,
Erik

Offline cladon

  • Volledig lid
  • **
  • Berichten: 246
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #10 Gepost op: 21 mei 2007, 16:50:04 »
De gescheiden invoer ...
Windows 10 Home   NLD 64bit,
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3401
P8B75-M LE
Intel(R) HD Graphics 4000 3072MB 1920 x 1080
VIA HD Audio
C:\ NTFS 237,25GB 135,35GB 15 293MB
AV: Kaspersky
FW: Windows 10

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #11 Gepost op: 22 mei 2007, 12:48:03 »
USERFORM met
TextBox1 "kommaLabel" TextBox2
CommandButton1
Option Explicit

Private Sub CommandButton1_Click()
MsgBox (Val(TextBox1) + Val(TextBox2) / 10 ^ Len(TextBox2))
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = Val(TextBox1) '0123-->123    ""-->0
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If check_keycode(KeyAscii, TextBox1) = False Then KeyAscii = 0
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If check_keycode(KeyAscii, TextBox2) = False Then KeyAscii = 0
End Sub

Private Sub UserForm_Initialize()
TextBox1.MaxLength = 10
TextBox2.MaxLength = 4
End Sub

Private Function check_keycode(KeyAscii As ReturnInteger, ThisTextBox As MSForms.TextBox) As Boolean

Dim DS As Long

DS = Asc(Application.DecimalSeparator)
DS = Asc(".")
'DS = vbKeyDecimal 'doesn't seem to work

    Select Case KeyAscii
    Case DS
    If Not InStr(TextBox1, Chr(DS)) Then check_keycode = True
    Case 48 To 57
    check_keycode = True
    Case Else
    End Select

    With ThisTextBox
    If .MaxLength = Len(.Text) Then MsgBox "Maximum number of characters = " & .MaxLength, vbCritical, "ERROR"
    End With

End Function
De code bevat het instellen van "MaxLength": voor de komma 10 cijfers, na de komma 4.

Bijlagen:
"numeric input UF 1.jpg"
deel van UserForm
"Calculate"knop, vermenigvuldigt met 5 en plaatst het resultaat in een label. (in bovenstaande code vervangen door regel met MsgBox)
"numeric input UF 2.jpg"
Een "life"voorbeeld uit mijn facturatiemodel. Hier zijn geen kommalabels ingevoegd. De mensen weten vanzelf hoe het werkt :-)

beste groeten,
Erik

Offline cladon

  • Volledig lid
  • **
  • Berichten: 246
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #12 Gepost op: 22 mei 2007, 18:13:46 »
Bedankt Erik - prachtig stukje code en eigenlijk een eenvoudige oplossing. Maarja dat is juist je sterke kant .
Windows 10 Home   NLD 64bit,
Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3401
P8B75-M LE
Intel(R) HD Graphics 4000 3072MB 1920 x 1080
VIA HD Audio
C:\ NTFS 237,25GB 135,35GB 15 293MB
AV: Kaspersky
FW: Windows 10

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Werken met een invoermasker
« Reactie #13 Gepost op: 22 mei 2007, 21:17:55 »
Dankjewel voor het compliment :)

Je hebt misschien gemerkt dat DS 2 keer wordt bepaald.
DS = Asc(Application.DecimalSeparator)
DS = Asc(".")
Het waren wat experimenten die blijven staan zijn. Je kan hier gerust de eerste regel weg"remmen"
Rem DS = ...of uit"quoten".
'DS = ...
Het volgende staat hier voor de volledigheid, "for future reference", maar je hoeft het niet persé te lezen...
Op het eerste zicht is er een kleine omweg gemaakt. Eerst Asc(...) en later weer omgezet naar Chr(...). Dat heeft te maken met de Select Case waarin "KeyAscii" vergeleken wordt met verschillende "getal"opties.

Fijne avond verder,
Erik

 


www.combell.com