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