Visual Basic批量编辑Word文档

时间:2017-01-04 14:19:00

标签: vba ms-word

我有数百个docx文档,我想用Visual Basic宏批量编辑。他们都在第一行共享一个id,如下所示:

9-ZKB-S

或者

12-JK-17

我想从ID中删除' - ',所以它会变成这样:

9ZKBS

或者

12JK17

然后在文档的某个地方我有一个单词,后跟一个这样的数字:

Productionnumber. 42-563-12

我还想删除减号:

Productionnumber. 4256312

我找到了一个可视化的基本脚本,它使我能够选择包含word文档的文件夹并执行搜索和替换。但我不知道如何做我提到的具体事情,如:

  • 在每个文档中,删除 - 和第一行中字符之间的空格
  • 在每个文档中,删除 Productionnumber之后的 - 和字符之间的空格。

    Sub CommandButton1_Click()
    Dim MyDialog As FileDialog, GetStr(1 To 500) As String '100 files is the    maximum applying this code
    On Error Resume Next
    Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)
    With MyDialog
    .Filters.Clear
    .Filters.Add "All WORD File ", "*.docx", 1
    .AllowMultiSelect = True
    i = 1
    If .Show = -1 Then
    For Each stiSelectedItem In .SelectedItems
    GetStr(i) = stiSelectedItem
    i = i + 1
    Next
    i = i - 1
    End If
    Application.ScreenUpdating = False
    For j = 1 To i Step 1
    Set Doc = Documents.Open(FileName:=GetStr(j), Visible:=True)
    Windows(GetStr(j)).Activate
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = "search" 'Find What
    .Replacement.Text = "find" 'Replace With
    .Forward = True
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = True
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Application.Run macroname:="NEWMACROS"
    ActiveDocument.Save
    ActiveWindow.Close
    Next
    Application.ScreenUpdating = True
    End With
    MsgBox "operation end, please view", vbInformation
    End Sub
    

1 个答案:

答案 0 :(得分:0)

查看Using wildcards并首先测试单词中的模式。例如(未测试):

With Doc.Range.Find
    .MatchWildcards = True
    .Text = "<(?*)>\-<(?*)>\-<(?*)>"
    .Replacement.Text = "\1\2\3" 'Replace With
    ' ... the rest of the options
End With