Vba 尝试选择多个文档时,如何解决运行时错误5479?

Vba 尝试选择多个文档时,如何解决运行时错误5479?,vba,ms-word,Vba,Ms Word,我试图编写一个宏来查找一个单词并将其标记为书签,并对多个文档执行此操作,在所有文档中使用相同的单词和相同的书签。但是,如果选择多个文档,则会出现一个错误,显示: 运行时错误5479 无法关闭Microsoft word,因为对话框处于打开状态 我单击“确定”,切换到Word,然后关闭对话框。我在Word2013中运行它,运行在Windows7上 我希望它打开每个Word文档,找到术语“TBC”,添加书签UMR,然后保存并关闭文档,然后打开下一个文档并执行相同操作,直到文档用完 实际发生的是它改变

我试图编写一个宏来查找一个单词并将其标记为书签,并对多个文档执行此操作,在所有文档中使用相同的单词和相同的书签。但是,如果选择多个文档,则会出现一个错误,显示:

运行时错误5479
无法关闭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外观正在对同一书签进行多次添加。这就是你想要的吗。只有最后添加的书签会保留下来。谢谢。现在,这是完全有道理的。非常感谢你的帮助。太感谢你了,谢谢你。现在,这是完全有道理的。非常感谢你的帮助。非常感谢你