У меня есть документ Microsoft Word с двумя разделами текста. Первый - в форме абзаца, второй - в том, что форма абзаца разбита на сегменты и помещена в таблицу без знаков препинания. Есть ли функция, которую я могу использовать, чтобы:

  • Если: В пунктурованном тексте за разделом следует знак пунктуации,
  • Затем: в пунктуированный текст в таблице добавляется пунктуация.

Если это невозможно в Microsoft Word, то есть ли другие предлагаемые инструменты для достижения этой цели?

Вот снимок экрана, сделанный в Microsoft Word, чтобы проиллюстрировать мою проблему.

Вот изображение, иллюстрирующее задачу

1 ответ1

0

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

Sub AddPunction()
Dim para As Paragraph, tbl As Table, tRow As Row
Dim tCell As Cell, cRng As Range, pRng As Range
For Each tbl In ActiveDocument.Tables
    For Each tRow In tbl.rows
        For Each tCell In tRow.Cells
            Set cRng = tCell.Range
            cRng.MoveEnd wdCharacter, -1
            If cRng.Paragraphs.Count > 0 Then
                For Each para In cRng.Paragraphs
                    Set pRng = para.Range
                    If Asc(pRng.Characters.Last) = 13 Then
                        pRng.MoveEnd wdCharacter, -1
                    End If
                    If Not Asc(pRng.Characters.Last) = 46 Then
                        pRng.Text = pRng.Text & "."
                    End If
                Next para
            End If
        Next tCell
    Next tRow
Next tbl
End Sub

На основе ваших дополнительных вопросов, размещенных в качестве комментариев, вот дополнения к моему первоначальному ответу:

Для ресурса по созданию или запуску макроса используйте эту ссылку поддержки Microsoft. https://support.office.com/en-us/article/create-or-run-a-macro-c6b99036-905c-49a6-818a-dfb98b7c3c9c

Что касается вашего другого вопроса об адаптации вышеуказанного кода на основе вашей новой предоставленной информации, то это как его изменить.

Sub TableLookBackAddPunctuation()
Dim para As Paragraph, tbl As Table, tRow As Row
Dim tCell As Cell, cRng As Range, pRng As Range
Dim rng As word.Range
For Each tbl In ActiveDocument.Tables
    For Each tRow In tbl.rows
        Set cRng = tRow.Cells(1).Range
        cRng.MoveEnd wdCharacter, -1
        If cRng.Paragraphs.Count > 0 Then
            For Each para In cRng.Paragraphs
                Set pRng = para.Range
                If Asc(pRng.Characters.Last) = 13 Then
                    pRng.MoveEnd wdCharacter, -1
                End If
                Select Case Asc(pRng.Characters.Last)
                    Case 33, 34, 35, 36, 37, 38, 39, 40, _
                            41, 42, 43, 44, 45, 46, 63
                        'do nothing, punctuation already set
                    Case Else
                        Set rng = pRng
                        rng.Collapse wdCollapseStart
                        With rng.Find
                            .ClearFormatting
                            .Format = False
                            .Forward = False
                            .MatchCase = True
                            .Text = pRng.Text
                            .Wrap = wdFindStop
                            .Execute
                            If .found Then
                                rng.MoveEnd wdCharacter, 1
                                Select Case Asc(rng.Characters.Last)
                                    Case 33, 34, 35, 36, 37, 38, 39, 40, _
                                            41, 42, 43, 44, 45, 46, 63
                                        pRng.Text = pRng.Text & rng.Characters.Last
                                    Case Else
                                        'do nothing, there's no punctuation
                                End Select
                            End If
                        End With
                End Select
            Next para
        End If
    Next tRow
Next tbl
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .