You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VBA获取Win+;插入的U+1F44D表情的真实Unicode码点?

如何获取Win+;插入的Emoji的真实Unicode码点(Word VBA场景)

最近在处理Word VBA中Emoji字符的问题时,遇到了一个奇怪的现象:用Win+;快捷键插入的点赞表情(Unicode码点U+1F44D),无法通过常规VBA方法获取到真实的码点信息,反而得到了错误的结果。

测试代码及结果差异

我用以下VBA代码来测试获取字符信息:

Sub test()
    Dim text As String
    Dim length As Integer
    Dim arrBytes() As Byte
    text = ActiveDocument.Range.Characters(1).text
    length = Len(ActiveDocument.Range.Characters(1).text)
    arrBytes = ActiveDocument.Range.Characters(1).text
End Sub

两种插入方式的结果对比

  • Win+;快捷键插入表情的调试结果:

    • text = "12"
    • length = 2
    • arrBytes = {49, 0, 50, 0}
      显然这并不是U+1F44D对应的正确字节信息。
  • 通过菜单「插入>符号>字体“Segoe UI Emoji”>U+1F44D」插入表情的调试结果:

    • text = ??(显示为无单独意义的代理码点)
    • length = 2
    • arrBytes = {61, 216, 77, 220}(可正确解码为U+1F44D)

补充发现

5月22日补充

经过排查发现,Win+;插入的符号,只有在文档Range对象的XML属性里能找到正确的4字节值{61, 216, 77, 220},但需要解析整个XML并对应到Range的具体位置,实现起来难度较高。

以下是Win+;插入表情对应的XML片段:

<?xml version="1.0" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument ...>
...(约23000字符)
<w:body>
<wx:sect>
<w:p wsp:rsidR="002703DB" wsp:rsidRDefault="003926FB">
<w:r>
<w:rPr>
<w:rFonts w:ascii="Segoe UI Emoji" w:h-ansi="Segoe UI Emoji"/>
<wx:font wx:val="Segoe UI Emoji"/>
</w:rPr>
<w:t>??</w:t>
</w:r>
</w:p>
<w:sectPr wsp:rsidR="002703DB" wsp:rsidSect="002849CD"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="708"/><w:docGrid w:line-pitch="360"/></w:sectPr>
</wx:sect>
</w:body>
</w:wordDocument>

而通过插入符号菜单添加表情的XML几乎一致,仅多了2个rFonts属性:

<w:body>
<wx:sect>
<w:p wsp:rsidR="00CD420D" wsp:rsidRDefault="00CD420D">
<w:r>
<w:rPr>
<w:rFonts w:ascii="Segoe UI Emoji" w:fareast="Segoe UI Emoji" w:h-ansi="Segoe UI Emoji" w:cs="Segoe UI Emoji"/>
<wx:font wx:val="Segoe UI Emoji"/>
</w:rPr>
<w:t>??</w:t>
</w:r>
</w:p>
<w:sectPr wsp:rsidR="00CD420D" wsp:rsidSect="002849CD"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="708"/><w:docGrid w:line-pitch="360"/></w:sectPr>
</wx:sect>
</w:body>
</w:wordDocument>

5月26日补充

@Florent B.提供的解决方案ActiveDocument.Content.InsertXML ActiveDocument.Content.XML在我的三台测试电脑上均有效,可以让VBA正确识别Win+;插入的Emoji码点。但需要注意的是,重新加载XML可能会影响VBA程序的其他逻辑,比如图片的Shape ID会被重编号,这是一个需要权衡的副作用。

可复现问题的设备/软件环境

  • 电脑1(联想X230):MS Word Office 365 1904 (16.0.11601.20174) 32位,Windows 10 Professional 10.0.17763 x64;升级至Office 365 1907 16.0.11901.20176,MSO (16.0.11901.20070) 32位,Windows 10 Professional 1809 17763.652 x64后仍可复现
  • 电脑2:MS Word Office 365 1904 (16.0.11601.20184) 64位,Windows 10 Professional 1809 17763.503 x64
  • 电脑3(戴尔):MS Word Office 365 ProPlus 1808 (16.0.10730.20334) 64位,Windows 10 Enterprise 10.0.17763 x64

内容的提问来源于stack exchange,提问作者Sandra Rossi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:03:09