VBA MS-WORD在变量数组中加载所有黄色突出显示的文本

时间:2017-06-02 12:28:46

标签: vba replace ms-word highlight information-extraction

我想运行一个宏,它将提取文档中所有黄色突出显示的文本,并将所有突出显示的文本传递给数组变量。

我找到了这个链接:How to perform a selective extraction of text higlighted in yellow from an MS Word document?

但是解决方案提出那些不起作用的并且不完全相同。

所以基本上逻辑是:

查找所有文档 计算有多少突出显示的文本pices

Dim CountYellow as integer
Dim HltText as variant
'i dont know how to do this next:
countyellow= number of highlighted texts
redim HltText(1 to countyellow)
for i=1 to countyellow
'I dont know how to do this next:
FIND THE NEXT YELLOW HIGHLIGHTED TEXT
HltText(i)= HIGHLIGHTED TEXT
next i

非常感谢

PS;在我重新阅读我的问题后,我想在此补充说明。文本将是这样的:

Lorem ipsum dolor sit amet,这篇文章是黄色突出 consectetur adipiscing elit。 Curabitur iaculis vehicula arcu,accumsan facilisis eros sagittis sed。 Duis坐在amet diam坐在amet magna pharetra molestie。 Cras sagittis lacus non tortor accumsan accumsan commodo at mi。 Ut ipsum nunc,elit quis的suscipit,auctor rutrum diam。 Mauris vel dictum dolor。 Quisque 这第二篇文章是黄色突出显示 porta a purus in sodales。 Pellentesque积累了一个molestie。 Duis tempor sapien enim,eu THIS 另一个文字突出显示 sollicitudin turpis volutpat sit amet。 Ut libero dui,dapibus in vulputate vitae,aliquet vel turpis。 Donec nec congue est。在enim turpis,scelerisque id condimentum ac,porta quis tellus。

然后: HltText(1)=“这个文字是黄色的突出显示” HltText(2)=“他的第二个文字是黄色突出显示” 等...

2 个答案:

答案 0 :(得分:0)

或许这样的事情?

Sub Highlights()
'
' Highlights Macro
'
Dim rng As Variant
Dim strResults(1000) As String
Dim intIndex As Integer

Set wordapp = CreateObject("word.Application")
    wordapp.documents.Open "C:\filename.docx"
    wordapp.Visible = True

Set rng = wordapp.ActiveDocument.Content
rng.Find.Forward = True
rng.Find.Highlight = True
rng.Find.Execute

intIndex = 0
Do While rng.Find.Found = True
    Debug.Print (rng.Text)
    strResults(intIndex) = rng.Text
    rng.Find.Execute
Loop

End Sub

答案 1 :(得分:0)

我想发布另一个不涉及使用字符的FIND的替代解决方案。

Dim YellowWord(1 To 100) As String
Dim i As Integer, j As Integer, k As Integer  'counter
i = 0

With Selection
.HomeKey Unit:=wdStory
While (ActiveDocument.Range.End - 1) > .Range.End
strText = ""
' mark first character of the current word
.MoveRight Unit:=WdUnits.wdCharacter, Count:=1, Extend:=wdExtend
If .Characters(1).FormattedText.HighlightColorIndex = m_lngFindColor Then
Do
' save charcater
strText = strText & .Text
' next character
.MoveRight Unit:=WdUnits.wdCharacter, Count:=1, Extend:=wdMove
Loop While .Characters(1).FormattedText.HighlightColorIndex = m_lngFindColor And ((ActiveDocument.Range.End - 1) > Selection.Range.End)
Debug.Print strText
i = i + 1
YellowWord(i) = strText
Debug.Print "YellowWord(" & i & ")= "; yellowWord(i)
End If
.Move WdUnits.wdWord, 1
Wend
End With

很奇怪。

注意用户不要使用任何其他黄色。我建议在特定的vbyellow颜色中加入一个突出显示的按钮。你知道我的意思。