Vba 尝试选择多个文档时,如何解决运行时错误5479?
我试图编写一个宏来查找一个单词并将其标记为书签,并对多个文档执行此操作,在所有文档中使用相同的单词和相同的书签。但是,如果选择多个文档,则会出现一个错误,显示: 运行时错误5479Vba 尝试选择多个文档时,如何解决运行时错误5479?,vba,ms-word,Vba,Ms Word,我试图编写一个宏来查找一个单词并将其标记为书签,并对多个文档执行此操作,在所有文档中使用相同的单词和相同的书签。但是,如果选择多个文档,则会出现一个错误,显示: 运行时错误5479 无法关闭Microsoft word,因为对话框处于打开状态 我单击“确定”,切换到Word,然后关闭对话框。我在Word2013中运行它,运行在Windows7上 我希望它打开每个Word文档,找到术语“TBC”,添加书签UMR,然后保存并关闭文档,然后打开下一个文档并执行相同操作,直到文档用完 实际发生的是它改变
无法关闭Microsoft word,因为对话框处于打开状态 我单击“确定”,切换到Word,然后关闭对话框。我在Word2013中运行它,运行在Windows7上 我希望它打开每个Word文档,找到术语“TBC”,添加书签UMR,然后保存并关闭文档,然后打开下一个文档并执行相同操作,直到文档用完 实际发生的是它改变了第一个,然后我得到了运行时错误。当我点击debug时突出显示的行是:
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
您正在尝试保存并关闭文档,但仍在搜索的中间。这似乎表现为“查找”对话框仍处于打开状态,阻止文档正确关闭,从而阻止加载下一个文档。尝试将保存和关闭移动到
循环之外,同时
循环:
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个要检查)。
< p>您正在尝试保存和关闭文档,但仍在搜索的中间。这似乎表现为“查找”对话框仍处于打开状态,阻止文档正确关闭,从而阻止加载下一个文档。尝试将保存和关闭移动到循环之外,同时
循环:
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要检查。)您的do While外观正在对同一书签进行多次添加。这就是你想要的吗。只有最后添加的书签将保留。您的do While外观正在对同一书签进行多次添加。这就是你想要的吗。只有最后添加的书签会保留下来。谢谢。现在,这是完全有道理的。非常感谢你的帮助。太感谢你了,谢谢你。现在,这是完全有道理的。非常感谢你的帮助。非常感谢你