检查Userform中的TextBoxes以确保它们是整数

时间:2016-04-21 16:50:36

标签: vba excel-vba excel

我在点击命令按钮时尝试检查Userform,以确保在文本框中输入的所有值均为integers。但是,即使我输入integer值(即所有文本框中的1),它现在也会弹出消息框。

这是我现在的代码:

'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

由于

2 个答案:

答案 0 :(得分:2)

这是一个只允许用户输入数字键的子

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

答案 1 :(得分:0)

与Doug Coats Solution结合使用

创建名为“CTextboxes”的类模块

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

将此代码放在UserForm代码模块中以供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

最后在UserForm代码的顶部定义此变量

Option Explicit

Dim TextBoxes() As New CTextboxes