一堆大神的解答 看的我都蒙圈了。。。
这段代码的槽点太多了。
我来理解一下这个代码思路
首先输入
想通过正则来判断是否是存在3个的连续的数字(我这个表达是严谨和正确的)
如果超过4位的用len(i)>0来判断
on error resume next
我也没想明白咋回事请。
正常来说 正则表达式 的 test 就是用来预防匹配不到。
匹配不到的情况下 其他操作比如execute replace等就会报错,但是test不会啊
最后通过select case来完成。
分析代码
application.inputbox 的type:=1 就完美解决了 输入非数字的问题
顶多还会有负号这种存在 -100也是可以的
第二正则检测的仅仅只是连续3个数字
F123 或者123F 这样的 他的test结果也是Ture
至于正则的2个属性
Global 全部匹配或者匹配一次
IgnoreCase 是否忽略大小写
这2条 在这段代码中 完全没有必要写。。。当然复制黏贴除外。
if not bl or len(i)>3then err.rasie 0
正则没匹配到 或者 I长度大于3 那么Err.raise 0
我测试了一下 err.ralse 0 还不如 直接err=0
err.ralse 0 我这里结果还是5.。。。 我以前没用过raise
loop while err.number<>0
这句话原本的想法是 循环到 填入正确的数值
但是因为 err.ralse 0 实际结果 是5 所以 即便4位数是错的 也会往下走
这不就是多一个变量的事情,为什么要用系统默认变量。。。。
select case这段
你直接给了2个条件 就是
<=200
<=987
换个角度解释一下 select
1号房间 姓张的进
2号房间 姓李的进
这时来了个姓赵的,让他去哪?
这段代码 如果我输入3位数 988 一样没结果。。
如果是1000 这2个条件都不符合,就到了 end select
程序完毕 没有结果。。。
这里我提到过-100 因为错的是 IF那句的Err 所以 负100 应该也会显示<=200的结果
但是代码的原本意思应该是不包含复数的。。。如果-100正常跑了 只是阴差阳错。。。
如果前面代码没有bug,那么1000是不会进入到select 这一段的
但是select case 这段有漏洞 988-999 也是没有结果的。
解决办法加一句
else case
不符合所有条件的 怎么办
和 IF 系列是一样的。
err.ralse 0 实际结果是5 至少我的电脑如此。。
不要偷懒。。。