Макрос. Приведение документа WORD к нужному виду - VBA

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. Есть некий документ WORD написанный абы как. Необходимо макросом исправить в нем лишние/не достающие пробелы, абзацы пустые строки. Необходимо функционирование макроса в WORD 2007 (2013) С двойными и лишними пробелами смог побороться вот таким макросом.
Хотелось бы в него добавить удаление пустых строк и установку необходимых пробелов после точек и запятых, а также установка пробелов перед открывающимися скобками. Прошу помочь. Файл для примера прилагаю.Характеристика .docx

Решение задачи: «Макрос. Приведение документа WORD к нужному виду»

textual
Листинг программы
Option Explicit
Sub Замена2()
Dim i As Variant
Dim arrText() As Variant
Dim xm(100), ym(100)
Dim x1 As Long
 
 
 x1 = x1 + 1: xm(x1) = "(.)([А-Я])": ym(x1) = "\1 \2" 'добавить пробел между точкой и следующим предложением
 x1 = x1 + 1: xm(x1) = "([А-Я].@)([А-Я])": ym(x1) = "\1 \2" 'добавить пробел между двумя ЗАГЛАВНЫМИ
 x1 = x1 + 1: xm(x1) = "([А-Я].@)([А-Я])": ym(x1) = "\1 \2" 'добавить пробел между двумя ЗАГЛАВНЫМИ для второй буквы
 x1 = x1 + 1: xm(x1) = "(,)(*)": ym(x1) = "\1 \2" 'добавить пробел между запятой и следующим словом
 x1 = x1 + 1: xm(x1) = "\(": ym(x1) = " (" 'добавить пробел перед открывающей скобкой
 x1 = x1 + 1: xm(x1) = "\)": ym(x1) = ") " 'добавить пробел после закрывающей скобки
 x1 = x1 + 1: xm(x1) = "\№": ym(x1) = "№ " 'добавить пробел после знака "№"
 'x1 = x1 + 1: xm(x1) = "\-": ym(x1) = " - " 'добавить пробел по сторонам знака "-"
 x1 = x1 + 1: xm(x1) = "(.) (^13)": ym(x1) = "\1\2" 'убрать пробелы между точкой и переходом на следующую строку
 x1 = x1 + 1: xm(x1) = "\( ": ym(x1) = "(" 'убрать пробел после открывающей скобкой
 x1 = x1 + 1: xm(x1) = " \)": ym(x1) = ")" 'убрать пробел перед закрывающей скобки
 x1 = x1 + 1: xm(x1) = "(*) @(.)": ym(x1) = "\1\2" 'убрать пробелы между словом и точкой
 x1 = x1 + 1: xm(x1) = "(*) @(,)": ym(x1) = "\1\2" 'убрать пробелы между словом и запятой
 x1 = x1 + 1: xm(x1) = "( ){2;}": ym(x1) = " " 'убрать повторяющиеся пробелы
 
Selection.WholeStory
 
For i = 1 To x1
 Debug.Print i, xm(i), "===="; ym(i)
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
 .Text = xm(i)
 .Replacement.Text = ym(i)
 .Forward = True
 .Wrap = wdFindContinue
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = True
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
Next
' Убрать пустые строки в конце документа
 ActiveDocument.Range(0, 0).Select
    Selection.EndKey wdStory
    On Error Resume Next
    Do
        If Selection.Previous.Text <> vbCr Then Exit Do
        Selection.TypeBackspace
    Loop
' Конец уборки строк
' Пусть будет указанный шрифт
Selection.WholeStory
Selection.Font.Name = "Times New Roman"
' Конец шрифта
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы