Office 2021 Excel宏数字转阿拉伯语单词乱码问题排查求助
解决Excel VBA数字转阿拉伯语单词的乱码问题
这明显是字符编码不匹配导致的问题——你的VBA代码里的阿拉伯语字符串在保存或运行时没有正确使用Unicode编码,所以才会显示成乱码(比如��� �������),复制代码时还会变成错误的拉丁字符(æÇÍÏ ÇËäÇä ËáÇË ÇÑÈÚ)。结合你用的Office 2021,我给你几个针对性的解决方案:
方案1:强制用UTF-8编码保存VBA代码
VBA默认用系统ANSI编码保存代码,这是乱码的核心原因之一。你可以通过导出再导入的方式强制转成UTF-8:
- 打开VBA编辑器(按
Alt+F11),选中你的代码模块,点击【文件】→【导出文件】,保存为.bas格式的文件 - 用记事本打开这个
.bas文件,点击【文件】→【另存为】,在“编码”下拉菜单里选择UTF-8,覆盖原文件 - 回到VBA编辑器,删除原来的模块,点击【文件】→【导入文件】,选择刚才保存的UTF-8格式
.bas文件
方案2:用Unicode转义字符替换直接输入的阿拉伯语字符串
这是最稳妥的方法,彻底避免编码冲突。你可以把代码里所有的阿拉伯语字符串换成ChrW()组合的Unicode转义格式,比如:
- 把
"واحد"替换成ChrW(&H647)&ChrW(&H627)&ChrW(&H62D)&ChrW(&H62F) - 把
"اثنان"替换成ChrW(&H627)&ChrW(&H62B)&ChrW(&H646)&ChrW(&H627)&ChrW(&H646)
修改后的Digit_Translator函数示例:
Private Function Digit_Translator(X) Dim n, c, c1, Digit1, c2, Digit2, c3, Digit3, c4, Digit4, c5, Digit5, c6, Digit6 n = Int(X) c = Format(n, "000000000000") c1 = Val(Mid(c, 12, 1)) Select Case c1 Case Is = 1: Digit1 = ChrW(&H647)&ChrW(&H627)&ChrW(&H62D)&ChrW(&H62F) ' واحد Case Is = 2: Digit1 = ChrW(&H627)&ChrW(&H62B)&ChrW(&H646)&ChrW(&H627)&ChrW(&H646) ' اثنان Case Is = 3: Digit1 = ChrW(&H62B)&ChrW(&H644)&ChrW(&H627)&ChrW(&H62B)&ChrW(&H646) ' ثلاث Case Is = 4: Digit1 = ChrW(&H627)&ChrW(&H631)&ChrW(&H628)&ChrW(&H639) ' اربع ' 其他数字以此类推 End Select ' 剩余代码保持不变... End Function
你可以用在线Unicode转VBA工具批量转换所有阿拉伯语字符串,节省时间。
方案3:调整VBA编辑器的字体和编码设置
确保编辑器能正确显示阿拉伯语字符:
- 打开VBA编辑器,点击【工具】→【选项】→【编辑器格式】,把字体改成支持阿拉伯语的字体(比如
Arial Unicode MS) - 点击【工具】→【选项】→【通用】,如果有“默认编码”选项,选择UTF-8(Office 2021应该支持这个设置)
方案4:最后确认系统区域设置
虽然你已经调整过,但再做一次确认:
- 打开控制面板→【区域】→【管理】→【更改系统区域设置】,勾选“Beta版:使用Unicode UTF-8提供全球语言支持”
- 重启电脑后再测试宏的输出效果
测试建议
修改完成后,先输入简单的数字测试,比如在Excel单元格里输入=SpellIt(1),确认输出正确的阿拉伯语单词,再逐步测试带小数的数字(比如=SpellIt(1.5)),验证完整功能。
内容的提问来源于stack exchange,提问作者Adam




