Я создаю накладную Словарные шаблоны на основе Слова Почтового Слияния. Я получаю необходимую информацию через файл .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) или (что было бы лучше imho) фильтр для всех абзацев .Font.Name "Times New Roman". Я не могу найти какой-либо способ найти знаки абзаца вообще. Но, опять же, я довольно новичок в VBA и на самом деле понятия не имею, что я здесь делаю. Как VBA действительно здорово. < EM> Facepalm

0
Grim 28 Май 2019 в 13:20

2 ответа

Лучший ответ

Еще быстрее простой поиск / замена:

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
2
macropod 29 Май 2019 в 00:56

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

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
1
AAA 28 Май 2019 в 10:47