Если вы не пишете очень короткие документы, очистка может быть одной из самых сложных частей написания. Следующий макрос дважды проверяет ваш документ, абзац за абзацем, чтобы определить, сбалансировано ли количество скобок у вас. Макрос подсчитывает количество левых круглых скобок в каждом абзаце вашего документа и следит за тем, чтобы у вас было одинаковое количество правых скобок. Если вы этого не сделаете, макрос вставит абзац перед несбалансированным абзацем, указывающим на ошибку.
Sub CheckParens () Dim WorkPara As String Dim CheckP () As Boolean Dim NumPara As Integer, J As Integer Dim LeftParens как целое число, RightParens как целое Dim MsgText как String NumPara = ActiveDocument.Paragraphs.Count ReDim CheckP (NumPara) MsgText = "*** Несбалансированные символы в следующем абзаце" For J = 1 To NumPara CheckP (J) = False WorkPara = ActiveDocument.Paragraphs (J) .Range.Text Если Len (WorkPara) 0, то LeftParens = CountChars (WorkPara, "(") RightParens = CountChars (WorkPara, ")") Если LeftParens RightParens, то CheckP (J) = True End If Next J For J = NumPara To 1 Step -1 If CheckP (J) Then Selection.HomeKey Unit: = wdStory, Extend: = wdMove If J> 1 Then Selection.MoveDown Unit: = wdParagraph, _ Count: = (J - 1), Extend: = wdMove End If Selection.InsertParagraphBefore Selection.MoveLeft Unit: = wdCharacter, Count: = 1 Selection.Style = "Normal" Selection.TypeText Text: = MsgText End If Next JEnd SubPrivate Function CountChars (A As String, C As String) As Integer Dim Count as Integer Dim Found as Integer Count = 0 Found = InStr (A, C) While Found 0 Count = Count + 1 Found = InStr (Found + 1, A, C) Wend CountChars = Функция CountEnd
Обратите внимание, что на самом деле здесь есть два макроса. Функция CountChars вызывается из основного макроса CheckParens. Именно этот последний макрос (CheckParens) вы должны вызывать в своем документе. Когда макрос будет завершен, вы можете выполнить поиск по документу, ища формулировку «*** Несбалансированные скобки», чтобы увидеть, где могут возникнуть проблемы.