为何在VBA中通过两数除法可检测用户的区域设置?
VBA代码原理说明
核心判断逻辑
这个函数是利用不同区域设置的数字格式差异做的判断,逻辑非常简单:
- 包括加拿大英语(EN CDN)在内的所有英语区系统,默认小数分隔符是
.,而大部分非英语区(比如法语区、中文区、欧洲多数国家)的小数分隔符是,,.会被识别成千位分隔符。 - 代码里
CLng("2.0")的作用是把字符串"2.0"转换为长整型数值:- 区域设置用
.做小数分隔符时,"2.0"是合法数字,转换成功,后续除法计算正常执行,函数最终返回True - 区域设置不用
.做小数分隔符时,"2.0"里的.属于非法字符,转换过程直接触发类型不匹配错误,代码跳到错误处理分支,函数返回False
- 区域设置用
常见疑问解答
temp变量的计算为什么会报错?
报错和后面的除法运算无关,问题出在CLng("2.0")这一步的字符串转数字操作:当系统的数字格式不把.识别为小数分隔符时,"2.0"就不是合法的数字字符串,转换操作直接抛出错误,后面的除法根本不会运行。
错误和区域设置的关联是什么?
VBA里所有字符串转数字的内置函数(CLng/CInt/CDbl等),都会自动读取当前系统的区域设置参数,匹配对应的小数、千位分隔符规则来解析字符串,所以转换操作会不会报错,完全由当前区域设置的数字格式规则决定。
补充:这个判断逻辑其实不够精准,所有使用
.作为小数分隔符的区域都会返回True,不止是EN CDN加拿大英语区域。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

