Multidesk.be » Forums » Programmeren algemeen » VBA: Input controleren op integer

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door StOosh op zaterdag 8 december 2012 om 10:12:38.
StOosh's avatar
Multiviteit: 1526
Hallo,

Ik programmeer in VBA ( vanuit Excel developer) het volgende:

Een textvak op een formulier kan worden ingevuld en bij het indrukken van ctrl-enter wordt de invoer ingelezen. Er gebeurt een controle op de lengte van de string (moet groter zijn dan 5) en het 3e en 4e karakter moeten een integer vormen. Die integer moet ik dan uitvoeren in een msgbox.
Ik had een voorbeeldcode vanwaar ik vertrokken ben en dan aanpassingen gemaakt heb met onderstaand resultaat. Alleen werkt het niet. Ik kan het opstarten, maar er wordt geen gevolg gegeven aan de ctrl-enter ingave...

Wat doe ik fout?

CODE
  1. Option Explicit
  2.  
  3. Private Sub TxtInvoer_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  4.     Dim StrInvoer As String
  5.     Dim StrDeel As String
  6.     Dim IntUitvoer As Integer
  7.    
  8.     If KeyAscii = 10 Then
  9.         StrInvoer = TxtInvoer.Value
  10.                
  11.         If Len(StrInvoer) > 5 Then
  12.             StrDeel = Mid(StrInvoer, 3, 2)
  13.            
  14.             If IsGeheelGetal(StrDeel) Then
  15.                 IntUitvoer = CInt(StrDeel)
  16.                 MsgBox (IntUitvoer)
  17.             Else
  18.                 MsgBox ("Het deel is geen geheel getal")
  19.             End If
  20.         Else
  21.             MsgBox ("Te korte string")
  22.         End If
  23.     End If
  24. End Sub
  25.  
  26. Function IsGeheelGetal(StrS As String) As Boolean
  27.     Dim Char1 As String
  28.     Dim Char2 As String
  29.    
  30.     If Len(StrS) <> 2 Then
  31.         IsGeheelGetal = False
  32.     Else
  33.         Char1 = Mid(StrS, 3)
  34.         Char2 = Mid(StrS, 4)
  35.        
  36.         If Char1 >= "0" And Char1 <= "9" And _
  37.            Char2 >= "0" And Char2 <= "9" Then
  38.             IsGeheelGetal = True
  39.         Else
  40.             IsGeheelGetal = False
  41.         End If
  42.     End If
  43. End Function
  44.  
  45.  
^ Reactie #1 geschreven door DTC op zaterdag 8 december 2012 om 12:00:48.
DTC's avatar
Multiviteit: 87
Wat bedoel je met ctrl-enter? Ctrl, enter of ctrl + enter?

Het KeyPress event wordt niet uitgevoerd bij het indrukken van de ctrl-toets.
Je zal het KeyDown event moeten gebruiken.

CODE
  1.  
  2. Option Explicit
  3.  
  4. Private Sub TxtInvoer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  5.     Dim StrInvoer As String
  6.     Dim StrDeel As String
  7.     Dim IntUitvoer As Integer
  8.  
  9.     If KeyCode = KeyCodeConstants.vbKeyControl Then
  10.         StrInvoer = TxtInvoer.Value
  11.  
  12.         If Len(StrInvoer) > 5 Then
  13.             StrDeel = Mid(StrInvoer, 3, 2)
  14.  
  15.             If IsGeheelGetal(StrDeel) Then
  16.                 IntUitvoer = CInt(StrDeel)
  17.                 MsgBox (IntUitvoer)
  18.             Else
  19.                 MsgBox ("Het deel is geen geheel getal")
  20.             End If
  21.         Else
  22.             MsgBox ("Te korte string")
  23.         End If
  24.     End If
  25. End Sub
  26.  
  27. Function IsGeheelGetal(StrS As String) As Boolean
  28.     Dim Char1 As String
  29.     Dim Char2 As String
  30.    
  31.     If Len(StrS) <> 2 Then
  32.         IsGeheelGetal = False
  33.     Else
  34.         Char1 = Mid(StrS, 3)
  35.         Char2 = Mid(StrS, 4)
  36.        
  37.         If Char1 >= "0" And Char1 <= "9" And _
  38.            Char2 >= "0" And Char2 <= "9" Then
  39.             IsGeheelGetal = True
  40.         Else
  41.             IsGeheelGetal = False
  42.         End If
  43.     End If
  44. End Function
  45.  
Deze tekst werd het laatst bewerkt voor 2.33 % door DTC op zaterdag 8 december 2012 om 12:07:03.
^ Reactie #2 geschreven door StOosh op zondag 9 december 2012 om 21:07:47.
StOosh's avatar
Multiviteit: 1526
Ik bedoel ctrl+enter

Maar het doet niets, eender wat ik invul (jouw aanpassing reageert slechts op de ctrtl toets, vermoed ik?)

Kan ik de enter-aanslag gewoon toevoegen door een AND?

CODE
  1. KeyCode = KeyCodeConstants.vbKeyControl And KeyCode = KeyCodeConstants.vbKeyReturn Then


Deze tekst werd het laatst bewerkt voor 39.11 % door StOosh op zondag 9 december 2012 om 21:18:37.
^ Reactie #3 geschreven door DTC op zondag 9 december 2012 om 23:14:58.
DTC's avatar
Multiviteit: 87
Met (Shift And 2) And KeyCode = KeyCodeConstants.vbKeyReturn kan je controleren of ctrl + enter wordt ingedrukt:

CODE
  1.  
  2. Option Explicit
  3.  
  4. Private Sub TxtInvoer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  5.     Dim StrInvoer As String
  6.     Dim StrDeel As String
  7.     Dim IntUitvoer As Integer
  8.    
  9.     If (Shift And 2) And KeyCode = KeyCodeConstants.vbKeyReturn Then
  10.         StrInvoer = TxtInvoer.Value
  11.  
  12.         If Len(StrInvoer) > 5 Then
  13.             StrDeel = Mid(StrInvoer, 3, 2)
  14.  
  15.             If IsGeheelGetal(StrDeel) Then
  16.                 IntUitvoer = CInt(StrDeel)
  17.                 MsgBox (IntUitvoer)
  18.             Else
  19.                 MsgBox ("Het deel is geen geheel getal")
  20.             End If
  21.         Else
  22.             MsgBox ("Te korte string")
  23.         End If
  24.     End If
  25. End Sub
  26.  
  27. Function IsGeheelGetal(StrS As String) As Boolean
  28.     Dim Char1 As String
  29.     Dim Char2 As String
  30.    
  31.     If Len(StrS) <> 2 Then
  32.         IsGeheelGetal = False
  33.     Else
  34.         Char1 = Mid(StrS, 3)
  35.         Char2 = Mid(StrS, 4)
  36.        
  37.         If Char1 >= "0" And Char1 <= "9" And _
  38.            Char2 >= "0" And Char2 <= "9" Then
  39.             IsGeheelGetal = True
  40.         Else
  41.             IsGeheelGetal = False
  42.         End If
  43.     End If
  44. End Function
  45.  
^ Reactie #4 geschreven door StOosh op woensdag 19 december 2012 om 23:07:40.
StOosh's avatar
Multiviteit: 1526
Dank je wel. Het werkt vlot op deze manier! :)
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen