VBA如何实现循环校验InputBox输入为8位数字格式的yyyymmdd日期?
问题根源
你的代码循环终止条件Loop Until True是恒真条件,第一次循环执行完毕后会直接触发终止逻辑,因此无论输入是否符合规则,都只会执行一次。Until关键字的作用是当后面的条件为真时停止循环,你需要将终止条件设置为「输入内容符合8位纯数字规则」,才能实现输入错误时自动重填的逻辑。
修正后的代码
' 模块级字符串变量,可供当前模块内所有Sub/Function调用 Dim svdate As String Sub inpt() Do svdate = InputBox("请输入8位日期,格式为yyyymmdd:") ' 处理用户点击取消的场景,避免强制用户一直输入 If svdate = vbNullString Then MsgBox "已取消输入,程序退出。" Exit Sub End If If Len(svdate) = 8 And IsNumeric(svdate) Then ' 校验通过,这里替换为你的业务逻辑代码 MsgBox "输入的日期为:" & svdate Else MsgBox "输入格式错误,请输入8位纯数字格式的yyyymmdd日期,重新输入。" End If ' 只有输入符合规则时才终止循环 Loop Until Len(svdate) = 8 And IsNumeric(svdate) ' 后续业务逻辑可直接调用svdate变量 End Sub
可选优化(按需启用)
如果需要进一步校验输入的8位数字是否为合法日期,可以在原有校验规则的基础上增加日期合法性判断:
' 替换原有If校验条件即可 If Len(svdate) = 8 And IsNumeric(svdate) And IsDate(Left(svdate,4) & "-" & Mid(svdate,5,2) & "-" & Right(svdate,2)) Then
该判断会自动拦截「20231301(月份不存在)」「20230230(日期不存在)」这类格式正确但实际不存在的日期。
内容的提问来源于stack exchange,提问作者lshneier
相关产品推荐
相关产品推荐

