使用VBA在Office中输入特殊字符(1/3)

161 篇文章 16 订阅
25 篇文章 2 订阅

有个网友希望使用代码输入如下“月亮”字符,从截图中可以看出其字体是Segoe UI Symbol。如果文件中已经有这个字符,当然最简单的方法就是复制/粘贴,可是如果在空白文档,那么该如何输入呢?是否可以使用VBA代码直接输入这个特殊字符?
在这里插入图片描述
在Office中有个神器,可以查看字符编码,例如在Word中选中字符,依次单击【插入】>【符号】>【其他符号】,在【符号】对话框中可以看到字符代码为1F319。
在这里插入图片描述
根据这个字符代码可以在Word中先输入1F319,然后按<Alt+X>快捷键,将自动转换为月亮符号,操作时录制宏可以得到代码如下。

' Word VBA代码
Sub Moon1()
    Selection.TypeText Text:="1f319"
    Selection.ToggleCharacterCode
End Sub

在Word中使用【插入】>【符号】>【其他符号】也可以插入月亮符号,操作时录制宏可以得到代码如下,这个代码看起来有些奇怪,两次使用InsertSymbol,但是最终文档中只是插入了一个字符,其原因是UTF16需要占用4个字节(Byte)。

Sub WordInsertMoon()
    Selection.InsertSymbol Font:="Segoe UI Symbol", CharacterNumber:=-10180, _
        Unicode:=True
    Selection.InsertSymbol Font:="Segoe UI Symbol", CharacterNumber:=-8423, _
        Unicode:=True
End Sub

在Word中使用代码插入月亮符号,还都不算太麻烦,然而在Excel中就没有这么幸运了。

如果希望插入这个符号就没有那么简单了,在Excel使用【插入】>【符号】插入月亮符号,操作时录制宏可以得到代码如下,代码中月亮符号被两个问号所代替,这个代码自然也将没有什么用处。Word VBA中的InsertSymbol和ToggleCharacterCode也无法应用于Excel。

ActiveCell.FormulaR1C1 = "??"

在Excel中如何解决这个难题呢?这里要用到Byte类型数组。
Byte数组比较特殊,在VBA中可以直接使用字符串为Byte数组赋值,第5行字符串AB赋值到数组aByte中,数组中4个元素的值如下图所示,想必大家都知道字符A和B的ASC码值分别65和66。
第6行代码将Byte数组赋值给一个新的字符变量newStr。
第7行代码在立即窗口中输出变量newStr的值。
在这里插入图片描述
利用Byte数组的这个特性,在VBA中就可以轻松输入月亮符号了。

Sub Demo()
    Dim moon As String, iNum
    Dim arrByte(0 To 3) As Byte
    iNum = Split("60,216,25,223", ",")
    For i = 0 To 3
        arrByte(i) = iNum(i)
    Next
    moon = arrByte
    ActiveCell.FormulaR1C1 = moon
End Sub

【代码解析】
第4行代码使用Split函数生成字符串数组。
第5~7行代码为循环结构将字符串数组赋值给Byte数组,注意此处Byte数组的4个元素分别为60,216,25,223,而并不是把字符数组iNum的每个字符的ASC保存到Byte数组中。
第8行代码将Byte数组转换为字符串。
第9行代码在活动单元格中输入月亮符号。


您也许关心为什么使用这四个数字(60,216,25,223)就可以输入月亮符号?如果输入其他符号,如何知道应该用什么数字呢?且听下回分解。


相关链接:

  1. 使用VBA在Office中输入特殊字符(1/3)
  2. 使用VBA在Office中输入特殊字符(2/3)
  3. 使用VBA在Office中输入特殊字符(3/3)
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值