代码之家  ›  专栏  ›  技术社区  ›  kroy2008

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

  •  0
  • kroy2008  · 技术社区  · 7 年前

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

    下面的代码将显示一个MsgBox,其中包含所选内容中的尾注全文,但我只希望在MsgBox中列出短语“提取的材料来自”和下一个分号之间的信息。(下面的尾注示例以粗体显示所需提取)

    尾注格式:

    [1] 位置1文本;位置2文本;位置3文本;位置4文本;位置5文本;位置6提取的材料来自 可食用//水果//苹果 ; 位置7文本;位置8文本

    [2] 位置1文本;位置2文本;位置3文本;位置4文本;位置5文本;位置6提取的材料来自 不可食用//家具//椅子 ; 位置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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   MoondogsMaDawg    7 年前

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

    下面您可以看到,您首先找到短语“提取的材料来自”的位置,并在该位置添加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