Добавление сделанных на заказ комментариев к документу word - PullRequest
0 голосов
/ 10 декабря 2018

При первой публикации, пожалуйста, потерпите меня ...

У меня есть документ с различными определениями терминов, которые будут использоваться позже в документе.

Формат определений = определение термина

Я хочу иметь возможность добавить термин и определение из этого списка и добавить комментарий, в котором указаны термин и определение во всех случаях в остальной части документа, чтобы я мог иметь термин и определение под рукойпока я читаю документ.

Например:

[где-то в документе] .... Используется термин .... [остальная часть абзаца]

ВыделитеВведите термин и добавьте комментарий к термину и определению из списка терминов и определений.

Я надеюсь, что объяснил это достаточно подробно, но, пожалуйста, дайте мне знать, если вам нужно что-то еще уточнить.

Большое спасибо заранее за любую помощь в этом.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Если вы используете таблицу из двух столбцов для своих терминов и определений, вы можете использовать макрос, подобный следующему:

Sub Demo()
Application.ScreenUpdating = False
Dim strFnd As String, strTip As String, r As Long
With ActiveDocument
  For r = 2 To .Tables(1).Rows.Count
    strFnd = Split(.Tables(1).Cell(r, 1).Range.Text, vbCr)(0)
    strTip = Split(.Tables(1).Cell(r, 2).Range.Text, vbCr)(0)
    With .Range(.Tables(1).Range.End, .Range.End)
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Format = False
        .Text = strFnd
        .Wrap = wdFindStop
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchCase = True
        .Execute
      End With
      Do While .Find.Found
        .Hyperlinks.Add Anchor:=.Duplicate, Address:=.Duplicate, ScreenTip:=strTip, TextToDisplay:=.Text
        .Start = .Hyperlinks(1).Range.End
        .Find.Execute
      Loop
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

Обратите внимание, что макрос предполагает: (a) термины и определения являютсяпервая таблица в документе, с отдельной строкой для каждого термина и его определения, и проверяются только термины после этой таблицы;(б) должны обрабатываться только точные совпадения (то есть множественное число будет пропущено);(c) термины находятся в первом столбце таблицы и не содержат двойных кавычек - можно использовать кавычки, но мы должны знать, используете ли вы умные или простые кавычки;и (d) термины и определения занимают только первый абзац в своих ячейках.

0 голосов
/ 10 декабря 2018

Я бы просто вставил этот список Excel в начало вашего контракта в виде таблицы.Пока он настроен как [term][definition], это должно сработать.

до изображения

после изображения

Sub question()

    Dim defined As Object
    Set defined = CreateObject("Scripting.Dictionary")

    For Each Row In ActiveDocument.Tables(1).Rows

        'left cell
        Dim term As String
        term = Trim(Left(Row.Cells(1).Range.Text, Len(Row.Cells(1).Range.Text) - 2))

        'right cell
        Dim definition As String
        definition = Trim(Left(Row.Cells(2).Range.Text, Len(Row.Cells(2).Range.Text) - 2))

        'connect term and definition
        defined.Add LCase(term), definition

        If Len(term) > 0 And Len(definition) > 0 Then

            'add bookmarks for each word
            With ActiveDocument.Bookmarks
                If Not .Exists(term) Then
                    .Add Range:=Row.Cells(1).Range, Name:=term
                    .DefaultSorting = wdSortByName
                    .ShowHidden = False
                End If
            End With

        End If

    Next Row

    'browse all words in the document
    For Each para In ActiveDocument.Paragraphs
        For Each wrd In para.Range.Words

            'check if current word has a definition (bookmark)
            If ActiveDocument.Bookmarks.Exists(wrd.Text) Then

'                'debug                
'                MsgBox wrd.Text
'                MsgBox defined(LCase(wrd.Text))

                If wrd.Hyperlinks.count = 0 Then
                    'add mouseover definition (screentip) to current term
                    ActiveDocument.Hyperlinks.Add _
                            Anchor:=wrd, _
                            Address:="", _
                            SubAddress:=wrd.Text, _
                            ScreenTip:=defined(LCase(wrd.Text)), _
                            TextToDisplay:=wrd.Text
                End If

            End If

        Next wrd
    Next para

End Sub
...