2016-04-21 4 views
0

Ich versuche, meine Userform zu überprüfen, wenn eine Befehlsschaltfläche angeklickt wird, um sicherzustellen, dass alle in Textfelder eingegebenen Werte integers sind. Im Moment wird es jedoch mit dem Nachrichtenfeld angezeigt, selbst wenn ich einen Wert integer (d. H. 1 für alle Textfelder) eingeben.Überprüfen Sie TextBoxen in Userform, um sicherzustellen, dass es sich um Ganzzahlen handelt.

Hier ist mein Code jetzt:

'Store inputs when clicking Continue 
Private Sub Continue1_Click() 

    'Define variables 
    Dim Ctl As Control 

    For Each Ctl In CategoriesForm.Controls 
     If TypeName(Ctl) = "TextBox" Then 
      If IsNumeric(Ctl.Value) = True Then 
       If Int(Ctl.Value) <> Ctl.Value Then 
        MsgBox ("All inputs need to be integers for calculations to work. Please check the values."), vbCritical, "Error: Not All Inputs are Integers" 
        Exit Sub 
       End If 
      Else 
       MsgBox ("All inputs need to be integers for calculations to work. Please check the values."), vbCritical, "Error: Not All Inputs are Integers" 
       Exit Sub 
      End If 
     End If 
    Next 

    NumberClamps = Number_Clamps.Value 
    NumberBrackets = Number_Brackets.Value 
    NumberWashers = Number_Washers.Value 
    NumberScrews = Number_Screws.Value 
    NumberNuts = Number_Nuts.Value 
    NumberUNuts = Number_UNuts.Value 
    NumberRivets = Number_Rivets.Value 
    NumberStuds = Number_Studs.Value 
    Unload CategoriesForm 

End Sub 

Dank

+0

Uh initialisiert definieren. Beide Message Box ist das gleiche ?? – findwindow

+0

Ich stimme @findwindow zu, welche MsgBox anzeigt? Ich würde vorschlagen, dass Sie im Debugger durchgehen, um die Werte zu überprüfen, um zu sehen, wohin die Logik Sie führt. – PeterT

Antwort

2

dies ist ein Unter, die nur Benutzer Zifferntasten

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    Select Case KeyAscii 
     Case vbKey0 To vbKey9 
     Case Else 
     KeyAscii = 0 
     Beep 
    End Select 
End Sub 
+0

Oh wow. Sie brauchen keine Bibliotheken zu referenzieren? – findwindow

+0

nein. KeyAscii ist stuffz –

+0

feel free zu markieren als beantwortet <3 –

0

In Verbindung mit Doug Coats Lösung

eingeben können

Erstellen Sie ein Klassenmodul namens "CTextboxen"

Option Explicit 

Public WithEvents TextGroup As MSForms.TextBox 


'Sub to allow users to only enter integer values 
Private Sub TextGroup_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 

Select Case KeyAscii 
    Case vbKey0 To vbKey9 
    Case Else 
    KeyAscii = 0 
    Beep 
    MsgBox ("All inputs need to be integers for calculations to work. Please check the values."), vbCritical, "Error: All Inputs must be Integers" 
End Select 

End Sub 

diesen Code in das für Userform Codemodul legen, wenn die Userform

Private Sub UserForm_Initialize() 

'Stop user from entering non-integer values 
Dim Ctl As MSForms.Control 
Dim i As Long 

i = 1 

For Each Ctl In Me.Controls 

    If TypeName(Ctl) = "TextBox" Then 
     ReDim Preserve TextBoxes(1 To i) 
     Set TextBoxes(i).TextGroup = Ctl 
     i = i + 1 
    End If 

Next Ctl 

End Sub 

Schließlich diese Variable an der Spitze des Userform-Code

Option Explicit 

Dim TextBoxes() As New CTextboxes 
Verwandte Themen