Avatar billede olehen Nybegynder
16. maj 2007 - 10:32 Der er 6 kommentarer og
1 løsning

Kun pos./neg. tal i textbox - userform (KeyAscii - godt/skidt?)

Har lavet følgende kode, som også virker som den skal.

Kan man slå de to sub'er sammen?

Ved godt den sidste egentlig kunne være rigeligt idet den fanger alle andre indtastninger, men ved at bruge Ascii så vil man som bruger ikke kunne bruge tid på at taste forkert.

Kan jeg være sikker på man kan bruge macroen over hele verden, når jeg indsnævre indtasningsmulighederne ved brug af Ascii i sub KeyPress?

Ved negative tal må man kun kunne indtaste minus på den første position, bruger jeg ikke "Not IsNumeric(.Text)" i exit sub så vil sub KeyPress ikke fange denne fejl.

Så lige nu fanger jeg fejlen i exit subben, når man forlader textboxen. Kan dette laves i sub KeyPress?

Min kode er som følgende:
Private Sub txtMaximum_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
On Error Resume Next
If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or KeyAscii = vbKeyBack _
        Or KeyAscii = 45 Then
        Exit Sub
    Else: KeyAscii = 0
        Beep
    End If
End Sub

Private Sub txtMaximum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
With Me.txtMaximum
  If Not IsNumeric(.Text) Or Len(.Text) > 23 Then
  MsgBox "Amount is too long. " _
  & "Please try again", vbExclamation, ""
  Cancel = True
  .SetFocus
  .SelStart = 0
  .SelLength = Len(.Text)
  End If
End With
  Me.txtMaximum.Value = Format((Me.txtMaximum.Value), "#,###0;(#,###0)")
End Sub
Avatar billede mikker Nybegynder
18. maj 2007 - 16:18 #1
Hej olehen

Her er et forslag.
Jeg har flyttet din kode til keyup eventen.

Private Sub txtMaximum_KeyUp(ByVal Keycode As MSForms.ReturnInteger, ByVal Shift As Integer)
'If Keycode <> 13 Then MsgBox Keycode
On Error Resume Next
If Len(txtMaximum) > 23 Then
txtMaximum = Left(txtMaximum, 23)
  MsgBox "Amount is too long. " _
  & "Please try again", vbExclamation, ""
  Cancel = True
  txtMaximum.SetFocus
  txtMaximum.SelStart = 0
  txtMaximum.SelLength = Len(txtMaximum)
End If
Select Case Keycode
Case 48 To 57, 96 To 105, 8, 13, 36, 110, 188
    Exit Sub
Case 109, 189
    If Len(txtMaximum) > 1 Then
    txtMaximum = "-" & Left(txtMaximum, Len(txtMaximum) - 1)
    End If
Case Else
txtMaximum = Left(txtMaximum, Len(txtMaximum) - 1)
End Select
txtMaximum.Value = Format((txtMaximum.Value), "#,###0;(#,###0)")
End Sub
Avatar billede olehen Nybegynder
06. juni 2007 - 10:31 #2
Mikker - tak for forsøget, men din kode virker ikke hensigtmæssigt. For det første er det ikke nogen god ide at bruge keyup, da man så skal trykke et tilfældigt sted efter indtasning af en kode. For det andet har jeg flytte selve funktionen fra txtMaximum til min enterknap, så tallene først kontrolleres i det øjeblik man trykker på enter istedet efter selve indtastningen. Og det virker meget bedre end min første løsning og din løsning. Så derfor trækker jeg spørgsmålet tilbage igen.
Avatar billede olehen Nybegynder
06. juni 2007 - 10:32 #3
Lukket
Avatar billede hubertus Seniormester
06. juni 2007 - 13:27 #4
Hej Olehen
Kunne du ikke vise din løsning? -
mvh. Hubertus
Avatar billede olehen Nybegynder
05. december 2007 - 14:32 #5
Hej Hubertus,

vil du stadig gerne se løsningen??
Avatar billede mikker Nybegynder
05. december 2007 - 19:11 #6
Det er der nok flere der gerne vil.
Om ikke andet så for at hjælpe andre i fremtiden.
Avatar billede hubertus Seniormester
05. december 2007 - 19:52 #7
Hej olehen
Ja, jeg vil da gerne se din løsning. :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester