색인에 밑줄 정의? (또는 원본 텍스트에서 서식 유지)


0

정의가 될 단어 문서에 색인을 작성하고 있습니다. 내 색인은 다음과 같습니다

슈퍼 히어로-슈퍼 인 사람 ..... 17
버스-위너 개처럼 길고 긴 자동차 ..... 28
고양이-이것은 작은 동물입니다 ......... 17

기타...

내 문서에서 텍스트는 다음과 같습니다.

그리고 슈퍼 히어로가 있습니다 -슈퍼 존재입니다.

"슈퍼 히어로"에 밑줄이 표시되어 있습니다 (밑줄을 표시하는 방법을 찾을 수 없으므로 대담하게 표시했습니다).

색인에 추가 할 때이 밑줄을 유지하는 방법이 있습니까? 또는 VBA를 사용하여 색인을 스캔하고 -? 앞에 나오는 각 줄에 텍스트에 밑줄을 긋는 방법이 있습니까?

편집 : 큰 아이디어는 120 페이지 이상의 문서가 있으며 비교적 자주 변경됩니다. 문서를 스캔하여 정의 ( "[something]-means"로 정의 됨)를 찾을 수있는 매크로가 있습니다. 그런 다음 이러한 정의를 색인에 추가하지만 문서에 존재하는 밑줄을 제거합니다. 색인에 다시 추가하고 싶습니다.

인덱스에 추가 할 때와 마찬가지로 모든 정의를 스캔하고 정의가 내 문서의 마지막 섹션에 있는지 확인할 수 있습니까? 내가 어떤 섹션 번호인지 If selection.section = activedocument.sections.count Then알 수 없다는 점을 제외하고 는 VBA에서 어떻게해야합니까 .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

마크 다운 밑줄이 있다고 생각하지 않습니다. VBA에서 이미 무엇을 시도 했습니까? 문자열을 찾으십니까? 선을 식별? 폰트 변경 코드?
Raystafarian

@Raystafarian-지금까지 (120 페이지 이상) 전체 문서를 반복하고 -(모든 정의가있는) 찾고있는 것을 제외하고는 많이 시도하지 않았습니다 . 색인에 도착하면 어떻게 알 수 있습니까? 마지막 색인이 고유 한 섹션이고 문서의 마지막 섹션인지 확인한 후 어떻게해서 반복 할 수 있습니까? 섹션에있는 섹션을 볼 If [the found word].Section = activedocument.sections.count then수 없다는 점을 제외하고[range].Section
BruceWayne

답변:


0

조금만해도 나는 그것을 달성 할 수있었습니다.

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를 배우고 있음을 알려주세요.


1
딕셔너리 / 배열을 사용하여 색인을 저장할 수있는 방법을 확인하십시오.
Raystafarian

@ raystafarian-흠, 나는 그것에 대해 몰라요! 나는 그것이 엑셀 사전과 다르다고 가정합니까?
BruceWayne

1
아니요, Excel에서 사용하는 것과 동일한 스크립팅 사전을 사용할 수 있어야합니다.
Raystafarian

@ Raystafarian-사전 토끼 구멍을 사용하여 시작했으며, 내가하려고했던 일에 대한 깔끔한 옵션 인 것처럼 보입니다 (이 질문에 반드시 필요한 것은 아니지만 일반적으로 내 주요 아이디어). 색인을 작성하는 대신 (너무 미치거나 복잡하지 않고 하나만 가질 수 있음) 세 개의 사전을 만든 다음 문서 끝에 출력 할 수 있습니다. 진심으로, 그 간단한 제안 친구를위한 열광에 감사합니다, 건배 !!!!
BruceWayne

1
그 소식을 듣게되어 기쁩니다!
Raystafarian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.