微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Word:获取插入符号的实际ASCII码

如何解决MS Word:获取插入符号的实际ASCII码

我正在尝试为MS-Word编写VBA代码,以从表中删除带有未打勾符号的行。 为此,我需要MS-Word来识别它并区分它和打勾的符号。但是与Excel不同的是,MS-Word似乎对此很不好。

为了解决这个问题,我插入了符号,但是我无法获得刚刚插入的字符的正确ASCII码。

这是我尝试过的:

Sub Symbolstest()
    Selection.InsertSymbol 163,"Wingdings 2",True 'Insert unticked
    Selection.MoveRight Unit:=wdCharacter,Count:=-1,Extend:=wdExtend 'Select it
    Debug.Print AscW(Selection.Text) & "  " & Selection.Text 'Ask for ASCII
    Selection.Collapse 0
    Selection.InsertSymbol 82,True 'Insert ticked
    Selection.MoveRight Unit:=wdCharacter,Extend:=wdExtend 'Select it
    Debug.Print AscW(Selection.Text) & "  " & Selection.Text 'Ask for ASCII
End Sub

输出为:

40  (
40  (

我希望它是:

163  ?
82  ?

我同时选择了?Selection.Characters(1) = Selection.Characters(2)并在即时窗口中尝试了True

任何帮助将不胜感激。

Symbols to be recognized

解决方法

据我所知

  • 没有简单的方法可以直接使用Selection或Range的任何属性直接获取字符的代码点或字体名称

  • 在这种情况下,Word始终使用代码点40(“)”),并且在内部,它确实存储您指定的字体的名称和Unicode代码点(例如,复选框为U + F052) )。

您可以做两件事。如果字符不是40,则假定它已经具有正确的代码点(尽管我不确定)。但是如果没有,

  • 检索Selection或Range的.XML或.WordOpenXML并查找相关元素,例如旧式.XML和较新的.WordOpenXML中的><w:sym w:font="Wingdings 2" w:char="F052"/>。您可以搜索文本<w:sym并在以下文本中查找字体和代码点,也可以使用XML解析器“正确执行”。在这种情况下,知道F052的意思是“代码点为F052的Unicode字符,或者它的意思是” F000 +原始字符集中的代码点”,在这种情况下可能是有用的。 。

例如一种方法是在VB编辑器的“工具-参考”中对Microsoft XML库(在本例中为6.0)进行引用,并按以下方式使用代码:

Sub getCharFontAndCodepoint()
Dim xdoc As MSXML2.DOMDocument60
Dim xSymNodes As MSXML2.IXMLDOMNodeList
Set xdoc = New MSXML2.DOMDocument60
xdoc.async = False
If xdoc.LoadXML(Selection.XML) Then
  xdoc.SetProperty _
    "SelectionNamespaces",_
    "xmlns:w='http://schemas.microsoft.com/office/word/2003/wordml'"
  Set xSymNodes = xdoc.SelectNodes("//w:sym/@w:font")
  If xSymNodes.Length > 0 Then
    Debug.Print xSymNodes(0).NodeValue
  End If
  Set xSymNodes = xdoc.SelectNodes("//w:sym/@w:char")
  If xSymNodes.Length > 0 Then
    Debug.Print xSymNodes(0).NodeValue
  End If
End If
Set xSymNodes = Nothing
Set xdoc = Nothing
End Sub
  • ,或者,如果仅需要代码点,则复制字符并使用特殊粘贴以Unformatted Unicode Text格式粘贴,例如

     Selection.Copy
     Selection.PasteSpecial link:=False,DataType:=22 ' There does not seem to be a named enum for this particular format
     Selection.MoveLeft Unit:=WdUnits.wdCharacter,Count:=1,Extend:=WdMovementType.wdExtend
     Debug.Print Hex(AscW(Selection))
     Selection.Document.Undo
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。