StrConv函数vbUnicode参数异常:无法将十进制72转回字符H
VBA StrConv字符与十进制值转换问题修复
你尝试用StrConv实现字符"H"和十进制72的互转,正向转换成功但反向得到乱码,原代码如下:
Public Sub Testing() Dim Text As String, Back As String, Deci() As Byte Text = "H" Deci = StrConv(Text, vbFromUnicode) Debug.Print Deci(0) ' 输出72,正常 Back = StrConv(Deci(0), vbUnicode) ' 此处出错,返回乱码 Debug.Print Back End Sub
错误原因
StrConv使用vbUnicode参数时,要求输入必须是字节数组,但你传入的是单个Byte类型值(Deci(0)),函数无法正确解析单个字节为Unicode编码,因此返回乱码。正向转换vbFromUnicode返回的是字节数组,反向转换必须保持输入类型匹配。
修正方案
将单个字节值包装成字节数组后再传入StrConv,修正后的代码:
Public Sub TestingFixed() Dim Text As String, Back As String, Deci() As Byte Dim singleByte(0) As Byte ' 定义单个元素的字节数组 Text = "H" Deci = StrConv(Text, vbFromUnicode) Debug.Print Deci(0) ' 输出72 singleByte(0) = Deci(0) ' 将单个字节存入数组 Back = StrConv(singleByte, vbUnicode) ' 传入字节数组转换 Debug.Print Back ' 输出"H",正常 End Sub
也可以用更简洁的数组字面量写法:
Back = StrConv(Array(Deci(0)), vbUnicode)
内容的提问来源于stack exchange,提问作者kyarudata
相关产品推荐
相关产品推荐

