我试图编写一个宏来查找单词并将其添加为书签,并对多个文档,所有文档中的相同单词和相同书签执行此操作。但是,如果我选择多个文档,则会出现错误消息:
运行时错误5479
您无法关闭Microsoft Word,因为已打开一个对话框。
我单击“确定”,切换到Word,然后关闭对话框。我正在Windows 7上运行的Word 2013中运行它。
我希望它可以打开每个Word文档,找到术语“ TBC”,添加书签UMR,然后保存并关闭文档,然后它将打开下一个文档并执行相同的操作,直到用尽文档。
实际上发生的是它更改了第一个,然后出现运行时错误。当我点击调试时突出显示的行是:
documents.Open dlgFile.SelectedItems (nDocx)
这是我的VBA:
Private Sub CommandButton1_Click()
Dim myRange As Range
Set dlgFile = Application.FileDialog(msoFileDialogFilePicker)
With dlgFile
dlgFile.AllowMultiSelect = True
If .Show = -1 Then
For nDocx = 1 To dlgFile.SelectedItems.Count
Documents.Open dlgFile.SelectedItems(nDocx)
MsgBox (ActiveDocument)
Set objDocx = ActiveDocument
Set myRange = ActiveDocument.Content
With myRange.Find
Do While .Execute(FindText:="TBC", MatchCase:=True)
ActiveDocument.Bookmarks.Add Name:="UMR", Range:=myRange
myRange.Select
objDocx.Save
objDocx.Close
Loop
End With
Set objDocx = Nothing
Next nDocx
Else
MsgBox ("You need to select documents first!")
Exit Sub
End If
End With
MsgBox ("You have added all the bookmarks.")
End Sub
答案 0 :(得分:0)
您仍在搜索过程中尝试保存并关闭文档。看来,此行为就像查找对话框仍处于打开状态,并阻止文档正确关闭,从而阻止了下一个文档的加载。尝试将保存并关闭到While
循环之外:
For nDocx = 1 To dlgFile.SelectedItems.Count
Documents.Open dlgFile.SelectedItems(nDocx)
MsgBox (ActiveDocument)
Set objDocx = ActiveDocument
Set myRange = ActiveDocument.Content
With myRange.Find
Do While .Execute(FindText:="TBC", MatchCase:=True)
ActiveDocument.Bookmarks.Add Name:="UMR", Range:=myRange
myRange.Select
Loop
End With
objDocx.Save
objDocx.Close
Set objDocx = Nothing
Next nDocx
(这在Word 2016中有效,但是与您的原始代码相比,我的行为会有所不同-所有文档均保持打开状态,但没有运行时错误。这里没有2013年可以检查。)