从选定尾注生成的字符串中提取文本

时间:2017-11-02 13:14:04

标签: vba ms-word extract

在Word中,当我选择一个段落时,我需要一个MsgBox来显示尾注中某个部分的列表(即每个段的新行)。

下面的代码将在选择中显示带有尾注全文的MsgBox,但我只想要短语"提取的材料来自"以及要在MsgBox中列出的下一个分号。 (以下以粗体显示所需提取的尾注示例)

尾注格式:

[1] Position1text; Position2text; Position3text; Position4text; Position5text; Position6提取的材料来自 EDIBLE // FRUIT // APPPLES ; Position7text; Position8text

[2] Position1text; Position2text; Position3text; Position4text; Position5text; Position6提取的材料来自 NONEDIBLE // FURNITURE // CHAIR ; Position7text; Position8text

我想把MsgBox读成:

本段包含:

食用// // FRUIT APPPLES

非食用// //家具CHAIR

Sub TestEndNoteMsg()
Dim e As Endnote
Dim str As String
For Each e In Selection.Endnotes
    str = str & e.Range.Text
Next e
MsgBox str
End Sub

1 个答案:

答案 0 :(得分:1)

这未经过优化,因此您可以更好地了解其工作原理。您可以轻松地将InStr函数嵌套到一行中,但有点难以理解。

下面你可以看到你首先找到短语“Extracted material is from”的位置,并在该位置添加27个字符(字符串的长度-1)。这为我们提供了我们想要从中开始提取的角色位置。

然后使用此位置作为新的起点,找到下一个分号并将该位置保存在lngEnd中。然后转换str以仅提取所需的数据。

修改 忘记循环,我保护str直到创建解析后的字符串,然后将每个元素附加到变量。我将str更改为e.Range.Text,仅处理当前的尾注处理,并避免截断上一个尾注。

Sub TestEndNoteMsg()
Dim e As Endnote
Dim str As String
Dim lngStart As Long
Dim lngEnd As Long
For Each e In Selection.Endnotes
    lngStart = InStr(1, e.Range.Text, "Extracted material is from ", 1) + 27
    lngEnd = InStr(lngStart, e.Range.Text, ";", 1)
    str = str & MID(e.Range.Text, lngStart, lngEnd - lngStart) & vbcrlf
Next e
MsgBox "This paragraph contains:" & vbcrlf & str
End Sub

Output