2017-06-23 2 views
0

Cela semble être un problème de langue qui a été résolu plusieurs fois. Cependant, tous les exemples que j'ai lus donnent la solution pour changer les paramètres de langue/séparateur décimal dans les paramètres de ma région.Le point du pavé numérique est inséré en tant que virgule dans ma zone de texte Access

Le problème est que je ne peux pas faire cela. J'utilise le paramètre de langue locale avec un séparateur décimal, car dans notre comté (Pays-Bas), les décimales sont séparées par une virgule, mais si je change la région -> Paramètres supplémentaires -> le symbole décimal en un point (également pour la devise) alors nos valeurs obtiennent, évidemment, un séparateur décimal de point au lieu d'une virgule. Cependant, nous utilisons également un point dans beaucoup de nos numéros d'article et pour ce faire rapidement, nous utilisons le point sur le pavé numérique. Avec les paramètres de la région actuelle, l'accès change le point sur le pavé numérique en une virgule aussi .. J'ai déjà essayé d'attraper la clé Ascii sur l'événement keydown d'une zone de texte et de la changer de virgule en point, MAIS pour une raison quelconque le code clé Ascii sur le pavé numérique pour le point est le même Keycode que le point sur le clavier normal (46) mais une virgule est toujours insérée. J'ai fait je pourrais simplement changer le Keyascii avec le point ASCII mais ceci ne fonctionnera pas (puisque ascii pense déjà que c'est un point).

Une idée de pourquoi cela se produit, et plus important, comment je peux le réparer sans changer les paramètres de ma région? Donc, le scénario parfait est que le point sur le pavé numérique est juste cela, un point.

Répondre

0

Vous pouvez convertir votre format numérique localisé à une chaîne avec un point:

CommaValue = "34,5" 
TextInput = Str(CDbl(CommaValue)) 

' TextInput -> "34.5" 
1

Vous pouvez les distinguer en cas KeyDown, pas KeyPress. Chaque clé a un KeyCode distinct, contrairement au KeyAscii.

Avec ce code:

Private Sub txtID_KeyDown(KeyCode As Integer, Shift As Integer) 
    Debug.Print "KeyCode: " & KeyCode 
End Sub 

Private Sub txtID_KeyPress(KeyAscii As Integer) 
    Debug.Print "KeyAscii: " & KeyAscii 
End Sub 

je reçois sur un clavier allemand:

Regular dot . 
KeyCode: 190 
KeyAscii: 46 

Regular comma , 
KeyCode: 188 
KeyAscii: 44 

Numpad comma , 
KeyCode: 110 
KeyAscii: 44 

Modifier

Et avec

Private Sub txtID_KeyDown(KeyCode As Integer, Shift As Integer) 

    ' Change Numpad comma into dot 
    If KeyCode = 110 Then KeyCode = 190 

End Sub 

Je peux taper un point avec la virgule du pavé numérique.

0

Une mauvaise pratique que vous pouvez également utiliser et qui offre une solution à ce problème et à d'autres problèmes de localisation: modifiez les paramètres de localisation lorsque l'accès est en cours d'exécution.

Créer une forme et une macro AutoExec qui ouvre le formulaire en mode caché, puis ajoutez le code suivant au formulaire:

Private Sub Form_Open(Cancel As Integer) 
    Dim wsh As Object 
    Set wsh = CreateObject("WScript.Shell") 
    wsh.RegWrite "HKCU\Control Panel\International\sDecimal", "." 
End Sub 

Public Sub Form_Close() 
    Dim wsh As Object 
    Set wsh = CreateObject("WScript.Shell") 
    wsh.RegWrite "HKCU\Control Panel\International\sDecimal", "," 
End Sub 

Si votre problème est uniquement textboxes spécifiques et la numpad, cette solution est exagérément et a de sérieux inconvénients (comme il change aussi les paramètres régionaux dans d'autres programmes aussi longtemps que l'accès est en cours d'exécution). Mais si vous voulez vraiment changer les paramètres régionaux uniquement pour l'accès, cela peut aider.