有没有办法让宏删除某个类型的所有段落?

时间:2019-05-28 10:20:28

标签: vba ms-word paragraph

我在Words Mail Merge的基础上创建发票Word模板。我从Web应用程序通过.csv文件获取了必要的信息,并根据这些信息创建了一个表。数据以这种方式给出:

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

有不同数量的发票类型/发票位置,所以我必须创建一个动态表,到目前为止效果很好。

我的问题: Word似乎会自动在通过{IF}语句插入的每个表之前插入一个段落。为什么我知道插入这些段落的Word?整个文档的Calibri大小为12,但是这些段落为Times New Roman10。

IMGUR-Link with (hopefully helpful images)

我的问题:有没有一种方法可以在创建的文档上运行一个宏,该宏将禁用/隐藏Times New Roman的每个段落?

我已经尝试了不同的设置来尝试阻止创建这些段落,但无济于事。因此,现在我试图在创建文档后隐藏这些段落。

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

我知道如何更改“隐藏属性”(这一点都不难..) 但是,对于.Font.Name“ Times New Roman”的所有段落,我将如何查找所有段落标记(我将不得不使用给定的If语句ive)或(这将是更好的恕我直言)过滤器。 我找不到任何找到段落标记的方法。但是比起对VBA来说,我还是很陌生,实际上不知道我在这里做什么。由于VBA确实很棒。 facepalm

2 个答案:

答案 0 :(得分:0)

您可以删除它们:

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 :(得分:0)

一个简单的查找/替换甚至更快:

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