索引中的下划线定义?(或保留原始文本的格式)

索引中的下划线定义?(或保留原始文本的格式)

我正在 Word 文档中建立一个索引,其中包含定义。我的索引将如下所示:

超级英雄 - 超人......17
巴士 - 很长的汽车,像腊肠犬......28
猫 - 这是一种小动物......17

ETC...

在我的文档中,文本如下所示:

然后有一个超级英雄- 超人。

“超级英雄” 被加下划线(无法找到如何加下划线,因此我将 SO 加粗)。

有没有办法在将其添加到索引时保留此下划线?或者,是否有办法使用 VBA 扫描我的索引,并在之前的每一行中为文本添加下划线-

编辑:主要想法是,我有一份 120 多页的文档,它变化得相对频繁。我有一个宏可以扫描文档,查找定义(定义为“[某物] - 意思”)。然后它将这些定义添加到索引中,但它会删除文档中存在的下划线。我想将其重新添加到索引中。

也许我可以扫描所有定义,就像我添加到索引时所做的那样,并检查定义是否在文档的最后一节中?我如何在 VBA 中执行此操作,就像类似If selection.section = activedocument.sections.count Then,只是您无法执行此操作.Section来查看我所在的节号。\

这是我的一些代码。只要我的索引比 少一个部分activedocument.sections.count,我就可以让它工作,尽管它是最后一部分。无论如何,这有效,我可以获取我的文本,但需要继续查看如何只为第一位加下划线:

Sub underline_Index_Definitions()
Dim myDoc As Word.Document
Dim rngDoc As Word.Range
Dim rngXE As Word.Range

Dim numParas&
Dim bFound As Boolean
Dim rng As Word.Range

Set myDoc = ActiveDocument
Set rngDoc = myDoc.Content
Set rngXE = rngDoc.Duplicate

bFound = True

Debug.Print "You have : " & myDoc.Sections.Count & " sections."

With rngDoc.Find
        .ClearFormatting
        .ClearAllFuzzyOptions
        .Text = "- means"
        .Format = False
        .Wrap = wdFindStop
End With

Do While bFound
bFound = rngDoc.Find.Execute
If bFound Then
    Set rngXE = rngDoc.Duplicate
    rngXE.Select
    If rngXE.Information(wdActiveEndSectionNumber) = myDoc.Sections.Count - 1 Then
        rngXE.Select
    End If

End If 'bFound
Loop
End Sub

答案1

尽管有些笨拙,我还是能够完成它:

Sub underline_Index_Definitions()
Dim myDoc As Word.Document
Dim rngDoc As Word.Range
Dim rngXE As Word.Range

Dim numParas&
Dim bFound As Boolean
Dim rng As Word.Range

Set myDoc = ActiveDocument
Set rngDoc = myDoc.Content
Set rngXE = rngDoc.Duplicate

bFound = True

Debug.Print "You have : " & myDoc.Sections.Count & " sections."

With rngDoc.Find
        .ClearFormatting
        .ClearAllFuzzyOptions
        .Text = "- means"
        .Format = False
        .Wrap = wdFindStop
End With

Do While bFound
bFound = rngDoc.Find.Execute
If bFound Then
    Set rngXE = rngDoc.Duplicate
    rngXE.Select
    If rngXE.Information(wdActiveEndSectionNumber) = myDoc.Sections.Count - 1 Then
        'Found definition in the index
        Set rngXE = rngXE.Paragraphs(1).Range
        rngXE.Select

        'Now, starting with the first character, go until the - and underline
        Dim startC&, endC&, x&
        x = 0
        Do Until rngXE.Characters(x + 1) = "-"
            Debug.Print rngXE.Characters(x + 1)
            If (x + 1) > rngXE.Characters.Count Then Exit Do
            x = x + 1
        Loop
        Set rngXE = myDoc.Range(Start:=rngXE.Characters(1).Start, End:=rngXE.Characters(x).End)
        rngXE.Select
        rngXE.Font.Underline = wdUnderlineSingle
    End If

End If 'bFound
Loop
End Sub

基本上,我知道我的索引是一个新的部分,位于文档的最末尾。因此,我只需让宏-在整个文档中查找,但只有当它到达索引(由 确定Activedocument.sections.count - 1)时,才会循环遍历每个段落并抓取 前面的文本-

如果有人有任何提示/想法,请告诉我,因为我仍在学习 Word VBA(也许很明显)

相关内容