使用VBA在Office中输入特殊字符(续)
《使用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-16Encoding 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中输入特殊字符(续)相关推荐
- 使用VBA在Office中输入特殊字符(3/3)
在博文<使用VBA在Office中输入特殊字符(1/3)>中我们知道月亮符号的字符代码为0x1F319[0x为16进制标识,在VBA中使用&H前缀]. 在Word中录制得到的代码如 ...
- 使用VBA在Office中输入特殊字符(1/3)
有个网友希望使用代码输入如下"月亮"字符,从截图中可以看出其字体是Segoe UI Symbol.如果文件中已经有这个字符,当然最简单的方法就是复制/粘贴,可是如果在空白文档,那么 ...
- Python中输入特殊字符
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中输入特殊字符 使用转义符\转义字符 ● 选择题 以下不是 ...
- cad中直径符号不显示_CAD中输入特殊字符,正负符号会,度数符号会,但这个你不一定会...
在CAD中,很多时候我们需要输入特殊字符,如在給尺寸添加正负号时,我们需要输入"±"号,有时候要修改一个线性尺寸为直径值,我们需要输入直径符号"Ø",为了表示角 ...
- linux系统vim下换行输入_vim 中输入特殊字符回车符号('\r')
回车的含义:将光标移动到行首部 linux 下回车符号为'\r',windows下为'\r\n' linux环境下在vim中输入回车符号方式: 测试方式:我们在一个文本文件中输入一串数字,然后在末尾输 ...
- 使用ALT+数字小键盘在文本文件中输入特殊字符
在Windows系统中, 将ALT键和数字代码组合在一起,可以打出普通键盘上不存在的特殊字符和符号.操作方式 为按住ALT键,在数字小键盘上输入对应的数字代码,松开ALT键,就可以现实对应的字符 ...
- Office中如何实现公式颜色的更改?
在Office中输入的数学公式以图形方式存在,而且无法设置字体颜色.如何使得数学公式能够设置自己的颜色,给大家介绍两种方法: 方法1 1.单击"插入→对象→Microsoft 3.0公式编辑 ...
- oracle 切割字符串加引号_Oracle 在字符串中输入单引号或特殊字符
-- Start 字符串是用单引号括起来的,如果想在字符串中输入单引号该怎么办呢?有两种方法. 方法一:是用两个单引号代表一个单引号 SELECT 'I''m Shangbo' FROM DUAL; ...
- OFFICE中的VBA库的定义
本文仅针对OFFICE的VBA,所提到的VBA均指OFFICE中的VBA. 1.所有我们引用到的都是对象,而不是类,也就是说,我们所看到的VBA帮助文档中所列出的 2.对象.属性.方法.事件是分别定义 ...
最新文章
- linux中mkswap命令使用方法,mkswap命令_Linux mkswap 命令用法详解:建立和设置SWAP交换分区...
- [CF]Codeforces Round #528 Div.2
- Hibernate【XXXX.hbm.xml】总结
- ASP.NET文件上传和下载
- atom 代码都是白色 怎么显示颜色_IBC1.0完成,ATOM为什么没涨?
- NetworkX系列教程(1)-创建graph
- 2021牛客多校2 - WeChat Walk(分块)
- 一文读懂层次聚类(Python代码)
- Node.js有了新的管理者
- 1434 区间LCM
- 未来架构师的平台战略范例(2)_集装箱
- Spark源码分析之Spark Shell(下)
- 中标麒麟(NeoKylin7)下达梦数据库(DM8)的安装部署
- 绝对值编码器与增量式编码器简析
- 一位月薪1.2w的北漂程序员真实生活!
- Android的Bitmap图片压缩与内存的关系
- 阿里云服务器配置(一)基础
- Opencv contours找出最大轮廓
- ReentrantReadWriteLock——读写锁如何升级,为何读写锁不能插队?
- sublime软件中如何给很多行数据加逗号及双引号并转换成一行?
热门文章
- 勿忘初心,坚定前行!
- wms与wmts的知识
- 神经网络中激活函数对比
- 解决Sublime突然无法自动补全问题
- 51单片机蜂鸣器演奏《小苹果》C语言程序,单片机控制蜂鸣器演奏音阶实例
- lpush和rpush的区别_关于redis之lpush、rpush、lset、lrem
- 建立CCS 3.3工程
- android7.1官方下载,Android系统7.1.2 Beta 2正式版
- matlab在线性系统中的应用,风力发电系统中Matlab鲁棒控制工具箱的应用
- 搞软件的必知------行业八大类软件