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

Extract text from string generated from selected endnotes

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

下面的代码将在 selection 中显示带有尾注全文的 MsgBox,但我只想在短语 "Extracted material is from " 和下一个分号之间列出信息消息框。 (下面以粗体显示所需提取的尾注示例)

尾注格式:

[1] 位置1文本;位置2文本;位置3文本;位置4文本;位置5文本; Position6 提取的素材来自EDIBLE//FRUIT//APPPLES;位置7文本;位置8文本

[2] 位置1文本;位置2文本;位置3文本;位置4文本;位置5文本; Position6 提取的素材来自NONEDIBLE//FURNITURE//CHAIR;位置7文本;位置8文本

我希望 MsgBox 显示为:

本段包含:

可食用//水果//苹果

不可食用//家具//椅子

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

这没有优化,因此您可以更好地了解它是如何工作的。您可以轻松地将 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