有个网友希望使用代码输入如下“月亮”字符,从截图中可以看出其字体是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:=TrueSelection.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, iNumDim arrByte(0 To 3) As ByteiNum = Split("60,216,25,223", ",")For i = 0 To 3arrByte(i) = iNum(i)Nextmoon = arrByteActiveCell.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)

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

  1. 使用VBA在Office中输入特殊字符(续)

    <使用VBA在Office中输入特殊字符(3/3)> 介绍了输入任意特殊符号的方法,并对于其编码原理进行了解释.感谢网友T_DC_Q在留言区提出的问题,输入WingDing2字体中的勾选符 ...

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

    在博文<使用VBA在Office中输入特殊字符(1/3)>中我们知道月亮符号的字符代码为0x1F319[0x为16进制标识,在VBA中使用&H前缀]. 在Word中录制得到的代码如 ...

  3. Python中输入特殊字符

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中输入特殊字符 使用转义符\转义字符 ● 选择题 以下不是 ...

  4. cad中直径符号不显示_CAD中输入特殊字符,正负符号会,度数符号会,但这个你不一定会...

    在CAD中,很多时候我们需要输入特殊字符,如在給尺寸添加正负号时,我们需要输入"±"号,有时候要修改一个线性尺寸为直径值,我们需要输入直径符号"Ø",为了表示角 ...

  5. linux系统vim下换行输入_vim 中输入特殊字符回车符号('\r')

    回车的含义:将光标移动到行首部 linux 下回车符号为'\r',windows下为'\r\n' linux环境下在vim中输入回车符号方式: 测试方式:我们在一个文本文件中输入一串数字,然后在末尾输 ...

  6. 使用ALT+数字小键盘在文本文件中输入特殊字符

     在Windows系统中, 将ALT键和数字代码组合在一起,可以打出普通键盘上不存在的特殊字符和符号.操作方式 为按住ALT键,在数字小键盘上输入对应的数字代码,松开ALT键,就可以现实对应的字符 ...

  7. Office中如何实现公式颜色的更改?

    在Office中输入的数学公式以图形方式存在,而且无法设置字体颜色.如何使得数学公式能够设置自己的颜色,给大家介绍两种方法: 方法1 1.单击"插入→对象→Microsoft 3.0公式编辑 ...

  8. oracle 切割字符串加引号_Oracle 在字符串中输入单引号或特殊字符

    -- Start 字符串是用单引号括起来的,如果想在字符串中输入单引号该怎么办呢?有两种方法. 方法一:是用两个单引号代表一个单引号 SELECT 'I''m Shangbo' FROM DUAL; ...

  9. OFFICE中的VBA库的定义

    本文仅针对OFFICE的VBA,所提到的VBA均指OFFICE中的VBA. 1.所有我们引用到的都是对象,而不是类,也就是说,我们所看到的VBA帮助文档中所列出的 2.对象.属性.方法.事件是分别定义 ...

最新文章

  1. DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁
  2. mysql default unix_timestamp_mysql中的unix_timestamp函数
  3. 线程间操作无效: 从不是创建控件的线程访问它
  4. popen函数_PHP中16个高危函数
  5. JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键
  6. 【codevs2287】火车站,第一个A掉的钻石题(迟来的解题报告)
  7. cad lisp 两侧偏移并删除_CAD做钣金件展开的原理你知道吗?
  8. java 中反射的使用_java中反射的基本使用
  9. 电商手机端促销海报设计PSD分层模板,来给你保驾护航!
  10. 计算机网络学习笔记(18. 网络应用(层)内容概述)
  11. Android TableLayout 表格布局
  12. 【图像融合】基于matlab GUI SIFT+小波变换图像拼接融合系统【含Matlab源码 815期】
  13. STC89C52RC烧录程序
  14. [转] 基于MBR 的bootkit的进展 鬼影-TDL4-BMW
  15. ArcGIS 解决影像裁剪后锯齿问题
  16. 流水灯程序总结:关于Crol和cror的用法
  17. python3 发送qq邮件带图片
  18. Tech Talk 宣传 | 如何高效、极简构造无服务器 Web 应用
  19. 微信小程序开发-多条件搜索tab展示
  20. Class热替换与卸载

热门文章

  1. 关于vmware p2v 转换后无法启动情况相关处理流程(仅作参考)
  2. 安装jdk并配置环境变量
  3. 【笔记】Linux命名空间—实验
  4. Java面向对象设计多态特征理解
  5. 在服务器后台运行程序
  6. 人体微生物组和幼儿成长---前1000天及以后
  7. Matlab实现孤勇者
  8. Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF--高清晰
  9. kakaotalk语音验证码,已读怎么破?KakaoTalk超实用的隐藏功能,真的太好用了!
  10. 推荐一个格式转换网站https://www.aconvert.com/cn/