VBA的ASC()函数在我的电脑上对特殊字符返回随机值,同事电脑运行正常
VBA的ASC()函数在我的电脑上对特殊字符返回随机值,同事电脑运行正常
嗨,这个问题我之前也碰到过,核心原因其实和系统编码设置以及VBA里ASC()函数的特性有关,咱们一步步拆解:
先说说问题根源
ASC()函数是基于ANSI编码(也就是系统默认的代码页)来返回字符值的,它不是Unicode兼容的。而°这个字符在不同的系统代码页里对应的编码值完全不一样:
- 比如同事电脑用的是Windows-1252(西欧/北美常用的代码页),这里
°的ANSI编码就是176,所以返回值稳定; - 但你的电脑可能存在代码页不稳定切换的情况——比如某些程序启动时临时修改了系统的代码页,或者系统区域设置里的非Unicode语言配置有冲突,导致Excel每次启动时读取的默认代码页都不一样,所以
ASC("°")的返回值才会随机变(64、232这些都是其他代码页里对应字符的编码)。
你试过修复、重装Office没用,是因为这个问题根本不在Office本身,而是系统编码环境的锅。
给你几个解决办法
统一系统区域编码设置
打开控制面板→区域→管理选项卡→点击“更改系统区域设置”,把“非Unicode程序的语言”改成和同事一致的(比如都是「英语(美国)」),改完重启电脑,再测试代码应该就稳定了。改用Unicode兼容的函数(更推荐)
直接放弃ASC(),换成AscW()——这个函数是基于Unicode编码的,不管系统代码页是什么,°的Unicode码是U+00B0(十进制就是176),所以AscW("°")会稳定返回176,彻底避开系统编码的坑。
测试代码改成这样:Sub Test() Dim temp As Integer temp = AscW("°") End Sub确保输入的
°字符是标准统一的
有时候如果是从不同网页/文档复制的°,可能是不同编码的变体,建议直接用键盘输入标准的°:按住Alt键,在数字键盘上输入0176,松开Alt就能打出标准的度数符号,这样也能避免编码转换的问题。
备注:内容来源于stack exchange,提问作者Arthur Attout
相关产品推荐
相关产品推荐

