用 VBA 添加 XML 代码

Haiyang Ai

Administrator
我在尝试写一个宏,把 Word 中已经高亮的词加上 XML 格式的代码,比如 <noun>高亮的名词</noun> 。
下面的代码是在别人的类似功能代码上的修改,但是目前不工作,希望得到大家的帮助:

代码:
Sub addCoding()
    Options.DefaultHighlightColorIndex = wdBrightGreen
    Selection.Find.ClearFormatting
    Selection.Find.Highlight = True
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Highlight = True
    Selection.Find.Execute Replace:=wdReplaceAll

    With Selection.Find
        Selection.InsertBefore "<noun>"
        Selection.InsertAfter "</noun>"
    End With
End Sub
 
如果“高亮”是指当前被鼠标选中的一个连续体的话……

sub noun()
selection.insertbefore "<noun>"
selection.insertafter "</noun>"
end sub

上面的VBA代码就是最基本的效果。但,完整的一整套,最好是跟着我这个教程
http://www.docin.com/p-466643055.html
 
回复: 用 VBA 添加 XML 代码

教程我仔细看了。 加注的功能我已经按你的教程弄出来了。但是现在我希望能够将文档中已经已经高亮的某些词全部自动的在前后加上代码。这个查找、替换和定位我还是没有弄清楚。
 
回复: 用 VBA 添加 XML 代码

用下面这个代码基本实现了所需要的功能。在我自己win7和word2007 上测试成功。不过加入的XML代码,后面部分还有高亮,不知道如何去除,请教李亮。

代码:
Sub addCoding()
 
Dim b, e As Boolean
 
 
For Each aPara In ActiveDocument.Paragraphs
 
b = True
e = False
 
For Each aChar In aPara.Range.Characters
If aChar.HighlightColorIndex = [FONT=Calibri]wdBrightGreen[/FONT] Then
If b Then
aChar.InsertBefore "<noun>"
 
b = False
e = True
End If
Else
 
If e Then
aChar.InsertBefore "</noun>"
End If
 
b = True
e = False
 
End If
 
Next aChar
 
Next aPara
 
MsgBox "done!"
 
End Sub
 
Last edited by a moderator:
回复: 用 VBA 添加 XML 代码

太好了,我在 Win 7 和 Word 2010 下面也实验成功了。虽然还有高亮的部分,不过这个可以通过全选,去除高亮的方式来手动解决。
 
对当前Word文件进行语料标签的自动插入,最好自动新建另一个文件来呈现结果

如果你对当前文件进行语料标签插入,并且采用了逐个字符或逐个段落的列举方法来扫描整个文件,那么,当前文件会随着标签插入而发生字符数量与单词数量甚至段落数量的变化的。所以,为了避免扫描过程中的当前文件的不断生长,而需要把当前的处理结果保存到一个字符串变量或新建一个word文件来保存。下面代码是“新建一个word文件”,然后就可以用“Application.Documents(0).Range.”来控制新建的word文件的内容
Application.Documents.Add
 
VBS和VBA的区别之一是:颜色名称常量在VBS中必须用整数值表达

用VBS控制VBA的时候,必须注意的一点就是wdColor系列与WdColorIndex系列的wdBlue之类的内置常量已经不被VBS识别,而必须在Word后台的Visual Basic编辑器的对象浏览器中查看对应的整数值,而且wdColor与wdColorIndex的同一名称的整数值还不一样,例如WdColorIndex.wdBlue是2,而WdColor.wdColorBlue是16711680 (&HFF0000),&HFF0000是16进制的整数值VB语法的表达。
 
回复: 对当前Word文件进行语料标签的自动插入,最好自动新建另一个文件来呈现结果

如果你对当前文件进行语料标签插入,并且采用了逐个字符或逐个段落的列举方法来扫描整个文件,那么,当前文件会随着标签插入而发生字符数量与单词数量甚至段落数量的变化的。所以,为了避免扫描过程中的当前文件的不断生长,而需要把当前的处理结果保存到一个字符串变量或新建一个word文件来保存。下面代码是“新建一个word文件”,然后就可以用“Application.Documents(0).Range.”来控制新建的word文件的内容
Application.Documents.Add
不过,我的代码都是用的insertbefore,所以暂时避免了重复扫描。如果采用insertafter就会出现亮哥说的情况。我在测试中,想消除高亮的时候,出现过重复扫描,无法停的现象。
 
回复: VBS和VBA的区别之一是:颜色名称常量在VBS中必须用整数值表达

用VBS控制VBA的时候,必须注意的一点就是wdColor系列与WdColorIndex系列的wdBlue之类的内置常量已经不被VBS识别,而必须在Word后台的Visual Basic编辑器的对象浏览器中查看对应的整数值,而且wdColor与wdColorIndex的同一名称的整数值还不一样,例如WdColorIndex.wdBlue是2,而WdColor.wdColorBlue是16711680 (&HFF0000),&HFF0000是16进制的整数值VB语法的表达。
专业啊!这些细节都考虑到了!
 
回复: 用 VBA 添加 XML 代码

高见!这些问题我都没有想到过。不过在我的试验中, aarondeng 的代码确实没有重复扫描。不过还是希望能够将高亮的地方替换成普通非高亮的...
 
回复: 用 VBA 添加 XML 代码

[xcode=vb]
Sub addCoding()
'已经解决取消高亮问题
Dim b, e As Boolean


For Each aPara In ActiveDocument.Paragraphs


e = False

For Each aChar In aPara.Range.Characters
If aChar.HighlightColorIndex = wdBrightGreen Then
aChar.HighlightColorIndex = wdNoHighlight
If b Then
aChar.InsertBefore "<noun>"

b = False
e = True
End If
Else

If e Then
aChar.InsertBefore "</noun>"
End If

b = True
e = False

End If

Next aChar

Next aPara

MsgBox "done!"

End Sub
[/xcode]
 
Last edited:
Back
顶部