我想让用户输入两个整数(两个文本框) 虽然不满足此条件,但我想让用户再次填写文本框。
这是我尝试过的方法,但这不是正确的答案:
Sub verif_type(n1, n2)
If TypeName(n1) = "Integer" And TypeName(n2) = "Integer" Then
MsgBox ("C'est bon !")
Else
MsgBox ("C'est pas bon, recommencez !")
Unload UserForm1
Call verif_type(n1, n2)
End If
End Sub
谢谢。
答案 0 :(得分:0)
从文本框中读取数据很可能每次都会返回一个字符串。因此,对于整数检查,请确保该数字是数字并且其中没有,
或.
。为了确保它是VBA整数,您可能还会看到它是否在-32768到32767的边界内。
Option Explicit
Sub TestMe()
verifType InputBox("Please enter value")
End Sub
Sub verifType(n1)
If IsNumeric(n1) _
And InStr(1, n1, ",") = 0 _
And InStr(1, n1, ".") = 0 Then
Debug.Print "Numeric!"
Else
Debug.Print "Not Numeric!"
TestMe
End If
End Sub
上面的代码通过TestMe()
调用,并且仅获得一个变量(比2容易写)。如果不是Integer
,则会再次调用它。遵循一些类似的逻辑来建立案例。
答案 1 :(得分:0)
您可以在转换为Long之前和之后检查字符串的长度:
Function IsInteger(n1 As Variant)
If IsNumeric(n1) Then IsInteger = Len(n1) = Len(CStr(CLng(n1)))
End Function
因此您的UserForm1
按钮点击事件代码可能是:
Private Sub CommandButton1_Click() ' change "CommandButton1" to your actual command button name
If IsInteger(Me.TextBox1) And IsInteger(Me.TextBox2) Then
MsgBox ("C'est bon !")
Me.Hide
Else
MsgBox ("C'est pas bon, recommencez !")
End If
End Sub
“主”调用代码可能是:
Sub main()
...
With New UserForm1
...
(possible code to pre-set UserForm1 controls to show to user)
...
.Show
...
(code to exploit UserForm1 controls values after user interaction)
...
End With
...
End Sub
答案 2 :(得分:0)
首先,检查文本框的内容可以使用IsNumeric解释为数字 其次,检查这些内容的值等于这些内容的舍入值
if IsNumeric(n1) then
if val(n1) = floor(val(n1)) then
' number is good, take appropriate action
else
' Inform user and take appropriate action
end if
else
'Inform user and take appropriate action
end if
根据经验,我建议将有效性检查放在文本框上的change事件中,然后使用包含状态消息的文本框或标签将其反馈给用户。
答案 3 :(得分:0)
如果输入的变量类型不正确,您的代码将递归调用自身。这将创建一个无限循环。
逻辑上,任何验证功能都应返回简单的“是”或“否”。它要么被验证,要么未被验证。这意味着返回一个简单的Boolean
-这反过来意味着它应该是Function
而不是Sub
。
并且 总是 使用Option Explicit
。
Function verif_type(n1 as Variant, n2 as Variant) as Boolean
If TypeName(n1) = "Integer" And TypeName(n2) = "Integer" Then
verif_type = True
'MsgBox ("C'est bon !")
Else
verif_type = False
'MsgBox ("C'est pas bon, recommencez !")
'Unload UserForm1
'Call verif_type(n1, n2)
End If
End Function
但这本身可以进一步简化为
Function verif_type(n1 as Variant, n2 as Variant) as Boolean
verif_type = TypeName(n1) = "Integer" And TypeName(n2) = "Integer"
End Function
现在,您所有的响应逻辑都在您的主代码中(我假设在您的UserForm
中)。
If verif_type(a,b) then
' Do something
Else
' Do something else
End If