使用VBScript筛选Word文档

时间:2018-10-03 21:40:05

标签: vbscript automation ms-word

我有一个非常大的word文档,大约100页,并且会自动生成。问题是大多数时候我想过滤选项(只有某些节和小节)。标题1是项目,标题2是图,标题3是图的组成部分。我一直在尝试使用VBScripts来选择我想要的标题2和3,然后删除不需要的标题中包含的所有内容。我一直在玩VBScripts,但似乎无法获得标题列表。这就是我的标题应该是什么样子。

Sub getHeadings()
    Set objSelection = objWord.Selection
    For Each p In objSelection.Paragraphs
        WScript.Echo p.Range.Text
    Next p
End Sub

我遇到的真正问题是找到有关将VBScript与Word结合使用的良好文档。如果有人可以帮助我,或向我指出好的文档指南,那将是很好的。

顺便说一句。我无法在VBA中执行此操作,因为此Word文档是由另一个程序自动生成的,我希望能够仅在命令行中执行快速命令,并准备好在打开文档时查找文档,找到宏,将其粘贴然后运行。最终目标是将该脚本与生成文档的脚本结合起来。

编辑: 根据要求,我添加了一些我用来打开文档的脚本

Dim objWord
Dim path
path = "C:\path\to\doc\test.docx"
Set objWord = CreateObject("Word.Application")

openWordDoc(path)

Sub openWordDoc(filepath)
    objWord.Visible = True
    Set objDoc = objWord.Documents.Open(filepath)
    Set objSelection = objWord.Selection
end Sub

1 个答案:

答案 0 :(得分:2)

下面的Word宏使您可以选择标题级别,然后遍历文档,查看该级别标题范围内的所有内容,然后选择要保留还是删除的内容。这比仅循环遍历所有段落要有效得多。

Sub ReviewHeadings()
Dim RngHd As Range, h As Long, Rslt
h = CLng(InputBox("Input the Heading level (e.g. 1) to process", "Heading Content Review", 1))
If (h < 1) Or (h > 9) Then Exit Sub
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = ""
    .Style = "Heading " & h
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchWildcards = False
    .Execute
  End With
  Do While .Find.Found
    Set RngHd = .Paragraphs(1).Range
    Set RngHd = RngHd.GoTo(What:=wdGoToBookmark, Name:="\HeadingLevel")
    RngHd.Select
    Rslt = MsgBox("Retain this portion?", vbYesNoCancel)
    If Rslt = vbCancel Then Exit Sub
    If Rslt = vbNo Then RngHd.Delete
    .Start = RngHd.End
    .Find.Execute
  Loop
End With
Set RngHd = Nothing
End Sub

您可以使用VBscript进行类似的操作,将命名的常量替换为其数值等效项。