《使用VBA在Office中输入特殊字符(3/3)》 介绍了输入任意特殊符号的方法,并对于其编码原理进行了解释。感谢网友T_DC_Q在留言区提出的问题,输入WingDing2字体中的勾选符号(方框中对号)时,前面会出现一个多余的五边形,如下图中A1单元格所示。

针对这个问题,先查看一下选中符号的字符代码为0x52,也就是十进制的82。

原代码的BUG在于疏忽了RFC2781规范中的第一条,对于字符代码值小于 0x10000的编码方式应该直接转换为16bit的无符号整数。

https://tools.ietf.org/html/rfc2781
2.1 Encoding UTF-16

Encoding of a single character from an ISO 10646 character value to
UTF-16 proceeds as follows. Let U be the character number, no greater
than 0x10FFFF.

If U < 0x10000, encode U as a 16-bit unsigned integer and
terminate.

更新自定义函数如下。

Function UTF16(sHex As String, Optional sMode As String = "HEX") As StringDim lByte, hByte, arrResIf Application.Hex2Dec(sHex) > &H10000 Then'&HDC00 = 56320, &HD800 = 55296lByte = Hex(56320 Or (&H3FF And Application.Hex2Dec(sHex)))hByte = Hex(55296 Or ((&HFFC00 And (Application.Hex2Dec(sHex) - &H10000)) / &H400))arrRes = Array(Right(hByte, 2), Left(hByte, 2), Right(lByte, 2), Left(lByte, 2))ElsesHex = Right("0000" & sHex, 4)arrRes = Array(Right(sHex, 2), Left(sHex, 2))End IfIf sMode = "DEC" ThenFor i = LBound(arrRes) To UBound(arrRes)arrRes(i) = Application.Hex2Dec(arrRes(i))NextEnd IfUTF16 = Join(arrRes)
End Function

【代码解析】
第8~11行代码处理代码值小于 0x10000的字符。
第9行代码将代码值补全为4位。
第10行代码分别提取高位和低位。
其余代码没有变化,这里不再赘述。
测试代码如下。

Sub InsertSymbol()Dim strChar As String, iNumDim arrByte(0 To 3) As ByteiNum = Split(UTF16("52", "DEC"))For i = 0 To UBound(iNum)arrByte(i) = iNum(i)NextstrChar = arrByteActiveCell.Formula = strCharActiveCell.Font.Name = "Wingdings 2"
End Sub

运行代码可以在活动单元格中输入正确的特殊字符。

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

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

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

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

    有个网友希望使用代码输入如下"月亮"字符,从截图中可以看出其字体是Segoe UI Symbol.如果文件中已经有这个字符,当然最简单的方法就是复制/粘贴,可是如果在空白文档,那么 ...

  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. linux中mkswap命令使用方法,mkswap命令_Linux mkswap 命令用法详解:建立和设置SWAP交换分区...
  2. [CF]Codeforces Round #528 Div.2
  3. Hibernate【XXXX.hbm.xml】总结
  4. ASP.NET文件上传和下载
  5. atom 代码都是白色 怎么显示颜色_IBC1.0完成,ATOM为什么没涨?
  6. NetworkX系列教程(1)-创建graph
  7. 2021牛客多校2 - WeChat Walk(分块)
  8. 一文读懂层次聚类(Python代码)
  9. Node.js有了新的管理者
  10. 1434 区间LCM
  11. 未来架构师的平台战略范例(2)_集装箱
  12. Spark源码分析之Spark Shell(下)
  13. 中标麒麟(NeoKylin7)下达梦数据库(DM8)的安装部署
  14. 绝对值编码器与增量式编码器简析
  15. 一位月薪1.2w的北漂程序员真实生活!
  16. Android的Bitmap图片压缩与内存的关系
  17. 阿里云服务器配置(一)基础
  18. Opencv contours找出最大轮廓
  19. ReentrantReadWriteLock——读写锁如何升级,为何读写锁不能插队?
  20. sublime软件中如何给很多行数据加逗号及双引号并转换成一行?

热门文章

  1. 勿忘初心,坚定前行!
  2. wms与wmts的知识
  3. 神经网络中激活函数对比
  4. 解决Sublime突然无法自动补全问题
  5. 51单片机蜂鸣器演奏《小苹果》C语言程序,单片机控制蜂鸣器演奏音阶实例
  6. lpush和rpush的区别_关于redis之lpush、rpush、lset、lrem
  7. 建立CCS 3.3工程
  8. android7.1官方下载,Android系统7.1.2 Beta 2正式版
  9. matlab在线性系统中的应用,风力发电系统中Matlab鲁棒控制工具箱的应用
  10. 搞软件的必知------行业八大类软件