我有数百个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
答案 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