Есть ли способ, чтобы макрос удалял все абзацы определенного типа? - PullRequest
0 голосов
/ 28 мая 2019

Я создаю накладную Словарные шаблоны на основе Слова Почтового Слияния.Я получаю необходимую информацию через файл .csv из веб-приложения и создаю таблицу на основе этой информации.Данные задаются следующим образом:

Person1 - InvoicePos1 - InvoicePos2 - InvoicePos3 - InvoicePos4
Person2 - InvoicePos1 - InvoicePos2 - InvoicePos3 - InvoicePos4
Person3 - InvoicePos1 - InvoicePos2 - InvoicePos3 - InvoicePos4
                              .
                              .
                              .
                              .

Существует различное количество типов счетов / позиций счетов, поэтому мне нужно создать динамическую таблицу, которая до сих пор прекрасно работает.

Моя проблема: WordКажется, автоматически вставляет абзац перед каждой таблицей, которая получает вставку через {IF} -Statement.Почему я знаю, что это Слово, которое вставляет эти абзацы?Ну, весь документ в формате Calibri 12, но эти абзацы - Times New Roman 10.

IMGUR-Link с (надеюсь полезными изображениями)

Мой вопрос: есть лиспособ создания макроса, который работает над созданным документом, который отключает / скрывает каждый абзац, который является Times New Roman?

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

Sub HidePara()
    If /FoundParagraphs/.Font.Name = "Times New Roman" Then 
        /FoundParagraphs/.Hidden = true
    End If 
End Sub

Я знаю, как изменить скрытый атрибут (что совсем не сложно ..) Но как бы я искал все метки абзаца?(Я бы использовал фильтр If-if, который я дал) или (что было бы лучше imho) фильтр для всех параграфов .Font.Name "Times New Roman".Я не могу найти какой-либо способ найти знаки абзаца вообще.Но, опять же, я довольно новичок в VBA и на самом деле понятия не имею, что я здесь делаю.Как VBA действительно здорово. Facepalm

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Еще быстрее - это просто Найти / Заменить:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .Font.Name = "Times New Roman"
    .Execute Replace:=wdReplaceAll
  End With
End With
Application.ScreenUpdating = True
End Sub
1 голос
/ 28 мая 2019

Вы можете просто удалить их:

Sub DelPara()
Dim oPara As Paragraph
For Each oPara In ActiveDocument.Paragraphs
    If oPara.Range.Font.Name = "Times New Roman" Then oPara.Range.Delete
Next oPara
End Sub
...