Word中使用VBA自动生成公式时的注意事项-阿里云开发者社区

开发者社区> 余二五> 正文

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL Server定时自动抓取耗时SQL并归档数据脚本分享
原文:SQL Server定时自动抓取耗时SQL并归档数据脚本分享 SQL Server定时自动抓取耗时SQL并归档数据脚本分享 第一步建库 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] GO 第二步创建sp_who3存储过程 -- http://sqlserverplanet.
983 0
【CSS】使用CSS控制文字过多自动省略号
使用CSS可以设置一下样式: u,small{ overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -...
1008 0
17 个适合餐馆和咖啡厅使用的 WordPress 主题
免费的主题 WP-Vitos WordPress Themes WP-Bistro WordPress Themes WP-MyKitchen WordPress Themes WP-Recipes Magazine WordPress Themes WP-Italian ...
522 0
【jacob word】使用jacob,合并多个word为一个word文件
将几个word文件合并到一个word文件,使用注意点: 1.后面附项目运用的jar包jacob-1.9, 2.并且jacob运用中,需要将附件内的jacob.dll放到windows/system32下   语法介绍: 将一个关于JACOB的代码分成下面几个步骤:     1) Acti...
1290 0
完整的个人博客指南:如何使用WordPress启动和发展个人博客
完整的个人博客指南:如何使用WordPress启动和发展个人博客 互联网上有足够的空间供所有人使用。人们喜欢分享想法,塑造他们的想法,甚至可能覆盖全球观众。如何让自己走上实现这一切的道路?一次,如何创建个人博客?由于几个原因,博客非常有效。
1485 0
阿里云acp认证考试时间 阿里云ACP认证考试注意事项有哪些?
阿里acp专业资格考试,在信息技术领域,阿里云acp应该是比较热门的专业考试之一了,如果想顺利的通过考试,阿里云acp认证考试时间 千万不可弄错,还有就是阿里云ACP认证考试注意事项有哪些?本文主要介绍了具体流程
173 0
使用mybatis-generator-plugin自动生成代码整合SpringBoot+MyBatis
使用mybatis-generator-plugin自动生成代码整合SpringBoot+MyBatis
10 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载