如何制作仅接受含3个数字、1个B和1个?的7位编码的VBA输入框
VBA带规则校验的密码输入框实现方案
以下是适配你需求的完整可运行代码,解决了你卡壳的3个数字统计问题,同时补充了所有要求的校验规则:
Sub btn_CheckCode2() Dim code As String ' 首次弹出输入框 code = InputBox("请输入校验码") ' 循环校验,直到符合要求或者用户取消 Do While Not CheckCodeValid(code) ' 用户点取消返回空的话直接退出 If code = "" Then MsgBox "已取消输入" Exit Sub End If code = InputBox("输入不符合规则,请重新输入:" & vbCrLf & "规则:7位字符,包含3个数字、1个大写B、1个英文问号?") Loop MsgBox ("输入成功,您输入的内容是:" & code) End Sub ' 单独封装校验逻辑,返回是否符合规则 Function CheckCodeValid(code As String) As Boolean ' 先校验长度是否为7位 If Len(code) <> 7 Then CheckCodeValid = False Exit Function End If Dim numCount As Integer, i As Integer numCount = 0 ' 遍历每个字符统计数字个数 For i = 1 To Len(code) If IsNumeric(Mid(code, i, 1)) Then numCount = numCount + 1 End If Next ' 校验数字个数是否为3 If numCount <> 3 Then CheckCodeValid = False Exit Function End If ' 校验是否包含大写B(InStr默认区分大小写,符合要求) If InStr(code, "B") = 0 Then CheckCodeValid = False Exit Function End If ' 校验是否包含英文问号 If InStr(code, "?") = 0 Then CheckCodeValid = False Exit Function End If ' 所有规则都符合 CheckCodeValid = True End Function
核心逻辑说明
- 你卡壳的3个数字校验通过
For循环遍历输入字符串的每一位字符实现,用IsNumeric判断当前字符是否为数字,累加计数后判断总计数是否等于3即可,不会限制数字的出现位置,符合通用校验需求。 - 特殊字符校验用VBA内置的
InStr函数实现,默认区分大小写刚好满足必须是大写B的要求,不需要额外做大小写转换。 - 把校验规则单独封装为函数,后续如果要调整规则只需要修改
CheckCodeValid里的逻辑即可,主循环代码更简洁,也修复了原代码里输入框弹出位置错误、可能出现死循环的问题。 - 增加了用户点击输入框取消按钮的退出逻辑,不会一直强制弹出输入框。
内容的提问来源于stack exchange,提问作者WanderingCoder
相关产品推荐
相关产品推荐

