Definições de sublinhado no índice? (ou mantenha a formatação do texto original)

0

Estou criando um índice em um documento do Word que será definido. Meu índice será parecido com:

Superhero - someone who is a super being.....17
Bus - an automobile that is long, like a wiener dog.....28
Cat - this is a small animal.........17

etc ...

No meu documento, o texto parece:

And then there's a Superhero - someone who is a super being.

Com "Superhero" sendo sublinhado (não consegui encontrar como sublinhar, então eu coloquei em negrito para SO).

Existe uma maneira de manter esse sublinhado ao adicioná-lo ao índice? Como alternativa, existe uma maneira de o VBA verificar o meu índice e sublinhar o texto em cada linha que vem antes do - ?

Edit: A grande ideia é que eu tenho um documento de mais de 120 páginas, que muda com relativa frequência. Eu tenho uma macro que pode digitalizar o documento, procurando definições (definido como "[algo] - significa"). Em seguida, adiciona essas definições a um índice, mas remove o sublinhado que existe no documento. Gostaria de adicioná-lo novamente no índice.

Talvez eu possa verificar todas as definições, como faço ao adicionar ao índice, e verificar se a definição está na última seção do meu documento? Como eu faria isso no VBA, como algo como If selection.section = activedocument.sections.count Then , exceto que você não pode fazer .Section para ver em que número da seção estou. \

Aqui está um código que eu tenho. Eu consegui trabalhar na medida em que meu índice é uma seção menor do que o activedocument.sections.count , apesar de ser a última seção. De qualquer forma, isso funciona e eu posso chegar ao meu texto, mas preciso continuar a ver como sublinhar apenas os primeiros bits:

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
    
por BruceWayne 08.04.2016 / 15:39

1 resposta

0

Eu consegui realizá-lo, ainda que com um pouco de clareza:

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

Basicamente, sei que meu índice é uma nova seção, no final do documento. Então, eu só tenho a macro procurando - em todo o documento, mas somente quando ela alcança o índice (determinado pelo Activedocument.sections.count - 1 ), faz um loop em cada parágrafo e pega texto na frente do - .

Se alguém tiver alguma dica / idéia, por favor, deixe-me saber como eu ainda estou aprendendo o Word VBA (talvez obviamente)

    
por 08.04.2016 / 20:33