在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
答案 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