Word中使用VBA自动生成公式时的注意事项

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub  GenEQ()
     If  Selection.start <> Selection. End  Then
         Dim  objRange  As  Range
         Dim  objEq  As  OMath
     
         Set  objRange = Selection.Range
         '不能加入下面这行注释掉的代码,否则在日文版Word 2007和2010上将不能实现下面的灵活字体控制
         'objRange.Text = Selection.Range.Text
         Set  objRange = objRange.OMaths.Add(objRange)
         '灵活控制哪类字符加斜体
         For  i = 1  To  objRange.Characters.count
             If  objRange.Characters(i).Text  Like  "[a-zA-Z]"  Then
                 objRange.Characters(i).Italic =  True
             Else
                 objRange.Characters(i).Italic =  False
             End  If
         Next  i
         Set  objEq = objRange.OMaths(1)
         objEq.BuildUp
         '加入下面这行代码,会使日文版Word 2007和2010的行为正常,否则将出现下面的怪异现象,中文版Word 2013没有这种现象:
         '在Word中,在第一行输入x=3,选择x=3,使用本函数生成公式(x是斜体,=3不是斜体),回车换行,当前光标将停留在居中位置(进行相同操作,中文版word 2013光标将停在左对齐位置),
         '再输入y=x+1,选择y=x+1,使用本函数生成公式(y=x+1都不是斜体)
         objEq.ParentOMath.Type = wdOMathInline
     End  If
End  Sub


如果在Word中输入“y=x”, 把“y=x”这3个字符加黑体,选择这3个字符,执行上面的宏GenEQ(),结果,x和y都不会加斜体。

因为 objRange.Characters(3).Text 返回的值并不是一个ASCII码的字符x,而是黑体x(MATHEMATICAL BOLD SMALL X) ,即Unicode字符U+1D431,UTF-16编码为: D835 DC31。

这样,If objRange.Characters(i).Text Like "[a-zA-Z]" Then 这个判断就总是失效的了。

也就是说,把字符串“y=x”转变为公式后,如果“y=x”不带字体,公式的Text就是“y=x”三个字符; 如果“y=x”带有黑体,公式的Text就变成了“U+1D432”“=”“U+1D431”三个字符。 

公式中的一个字符x,加了不同的字体,其实就变成了不同的Unicode字符了,就像上面看到的,对于字符x:

不加任何字体,那么他就是ASCII的x字符,

如果加了黑体就变成了字符U+1D431 (MATHEMATICAL BOLD SMALL X)

如果加了斜体,就变成了字符U+1D465 (MATHEMATICAL ITALIC SMALL X)

如果加了黑体斜体,就变成了字符U+1D499 (MATHEMATICAL BOLD ITALIC SMALL X)


可以使用下面VBA语句查看字符串的16进制值:

1
2
3
4
5
6
7
8
         Dim  As  String , hexStr  As  String
         
         s =  "北京beijing"
         
         For  i = 1  To  Len(s)
             hexStr = hexStr + Hex(AscW(Right(s, Len(s) - i + 1))) +  ";"
         Next  i
         MsgBox hexStr









本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/1604040,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
Python
【python脚本】word批注批量提取器V2实用版
【python脚本】word批注批量提取器V2实用版
|
2月前
|
存储
【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式
【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式
46 0
|
3月前
|
Python
python处理word文档,如何提取文档中的题目与答案
python处理word文档,如何提取文档中的题目与答案
32 0
|
4月前
|
PHP Python
基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符
基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符
|
10月前
【Word】Word公式导出PDF后出现井号括号#()错误
【Word】Word公式导出PDF后出现井号括号#()错误
121 0
|
6月前
|
缓存 Python
【python脚本】word批注状态批量提取器V1版本
【python脚本】word批注状态批量提取器V1版本
|
索引 Python
【VBA脚本】提取word文档中所有批注的信息和待解决状态
【VBA脚本】提取word文档中所有批注的信息和待解决状态
174 0
【VBA脚本】提取word文档中所有批注的信息和待解决状态
Word中使用MathType批量调整文档公式的大小
Word中使用MathType批量调整文档公式的大小
345 0
Word中使用MathType批量调整文档公式的大小
|
存储 监控 安全
python解析word拆分Excel选择题格式(3、判断题)
python解析word拆分Excel选择题格式(3、判断题)
98 0
|
XML 安全 数据挖掘
Python3,3行代码,把excel转换成任意格式的word文档,老板直接给我涨薪10K!!!
Python3,3行代码,把excel转换成任意格式的word文档,老板直接给我涨薪10K!!!
31437 1
Python3,3行代码,把excel转换成任意格式的word文档,老板直接给我涨薪10K!!!