有没有更好的方法来评估TextBox值
有没有更好的方法来简化此代码If IsNumeric(txtLengthFt) Then
If txtLengthFt.Value Mod 1 = 0 Then
intL = CInt(txtLengthFt) * 12
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.Show
End If
If IsNumeric(txtLengthIn) Then
If txtLengthIn.Value Mod 1 = 0 Then
intL = intL + CInt(txtLengthIn)
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.Show
End If
我制定了逻辑来确定用户是否输入了数值,但我没有';我不知道这是不是最好、最有效的方法
您可以简单地将文本框限制为只允许数字,从而避免检查值是否为数字
Private Sub txtLengthFt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Else
KeyAscii = 0
End Select
End Sub 谢谢Matt
我也学到了一些东西 谢谢Matt
如果他们按一个非数字,什么也不按,会发生什么 ;我从来没有用过,所以我现在正在尝试,但我想我会问一下,是否有任何抓到#039;我应该知道的
太好了 ;我从来不知道你能做到
谢谢Matt 既然你向我展示了这一点,我将向你展示你刚刚救了我什么 If IsNumeric(txtLengthFt) Then
If txtLengthFt.Value Mod 1 = 0 Then
intL = CInt(txtLengthFt) * 12
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.txtLengthFt.SetFocus
Me.txtLengthFt.SelStart = 0
Me.txtLengthFt.SelLength = Len(txtLengthFt)
Me.Show
End If
If IsNumeric(txtLengthIn) Then
If txtLengthIn.Value Mod 1 = 0 Then
intL = intL + CInt(txtLengthIn)
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.txtLengthFt.SetFocus
Me.txtLengthIn.SelStart = 0
Me.txtLengthIn.SelLength = Len(txtLengthFt)
Me.Show
End If
If IsNumeric(txtWidthFt) Then
If txtWidthFt.Value Mod 1 = 0 Then
intW = CInt(txtWidthFt) * 12
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.txtWidthFt.SetFocus
Me.txtWidthFt.SelStart = 0
Me.txtWidthFt.SelLength = Len(txtWidthFt)
Me.Show
End If
If IsNumeric(txtWidthIn) Then
If txtWidthIn.Value Mod 1 = 0 Then
intW = intW + CInt(txtWidthIn)
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.txtWidthFt.SetFocus
Me.txtWidthIn.SelStart = 0
Me.txtWidthIn.SelLength = Len(txtWidthFt)
Me.Show
End If
If IsNumeric(txtHeightFt) Then
If txtHeightFt.Value Mod 1 = 0 Then
intH = CInt(txtHeightFt) * 12
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.txtHeightFt.SetFocus
Me.txtHeightFt.SelStart = 0
Me.txtHeightFt.SelLength = Len(txtHeightFt)
Me.Show
End If
If IsNumeric(txtHeightIn) Then
If txtHeightIn.Value Mod 1 = 0 Then
intH = intH + CInt(txtHeightIn)
Else
MsgBox "Enter a valid Length"
Me.Show
End If
Else
MsgBox "Enter a valid Length"
Me.txtHeightFt.SetFocus
Me.txtHeightIn.SelStart = 0
Me.txtHeightIn.SelLength = Len(txtHeightFt)
Me.Show
End If 好的,既然我知道了,让我问这个问题 ;其中3个txt框用于英寸 ;我在考虑使用CInt()转换为整数,然后做一个<;12检查以确保他们没有#039;不要去他们应该去的地方';t、  ;还有其他想法吗 另一方面,在前面的代码中检查有效整数时出错,我弹出了一个msgbox,并将它们发送回表单,突出显示了有问题的txtbox ;但是,他们不得不再次点击GO按钮,这似乎让函数陷入了循环 ;我是否应该清除变量的值,并在数据最终良好时重新填充它们? 你可以这样做:
Private Sub TextBox1_Change()
If TextBox1.Value > 12 Then
MsgBox "Whoa pardner!Nothing greater than 12 is allowed here!", vbCritical + vbOKOnly
' Enter a value of '0' in the textbox
TextBox1.Text = "0"
' Highlight the text in the textbox for immediate re-entry of number(s)
TextBox1.SelStart = 0
TextBox1.SelLength = TextBox1.TextLength
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Else
KeyAscii = 0
End Select
End Sub 看看为什么函数第二次循环,它应该#039;不要只是验证数据然后继续。不要清除用户输入的数据,它';我很愚蠢,因为你搞砸了一个领域,不得不再次进入
如果验证数据,则;废话废话;msgbox“;你这个酒鬼!这是错误的&引用
endif
页:
[1]
2