Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 激活/选择word文档并查找该文档中活动单元格的值_Excel_Vba_Search_Ms Word_Find - Fatal编程技术网

Excel 激活/选择word文档并查找该文档中活动单元格的值

Excel 激活/选择word文档并查找该文档中活动单元格的值,excel,vba,search,ms-word,find,Excel,Vba,Search,Ms Word,Find,我想选择一个单元格,并使用该单元格中的值文本在特定word文档(xxxxxx.docx)中搜索/查找。此文档已与其他word文档一起打开 下面的代码实现了我想要的…几乎。它打开特定文档,然后查找文本。但是文档已经打开了,所以它不适合这个工作。它只需要被选择/激活,而不需要再次打开 是否有人知道如何进行管理:选择任何单元格,使用该单元格中的值,激活/选择xxxxxx.docx,然后搜索该值 **最重要的是,找到的文本显示在文档中,文档必须在屏幕上显示/弹出。所有这些都是为了在本文档中快速导航 Su

我想选择一个单元格,并使用该单元格中的值文本在特定word文档(xxxxxx.docx)中搜索/查找。此文档已与其他word文档一起打开

下面的代码实现了我想要的…几乎。它打开特定文档,然后查找文本。但是文档已经打开了,所以它不适合这个工作。它只需要被选择/激活,而不需要再次打开

是否有人知道如何进行管理:选择任何单元格,使用该单元格中的值,激活/选择xxxxxx.docx,然后搜索该值

**最重要的是,找到的文本显示在文档中,文档必须在屏幕上显示/弹出。所有这些都是为了在本文档中快速导航

Sub FindName()

    Dim wrdApp As Object
    Dim wrdDoc As Object
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open("C:\xxxxxx.docx")
    Dim FindWord As String
    Dim result As String
    FindWord = ActiveCell.Value
    wrdDoc.SelectAllEditableRanges

    With wrdDoc.ActiveWindow.Selection.Find
        .Text = FindWord
        .Replacement.Text = ""
        .Forward = True
        .Wrap = 1
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    wrdDoc.ActiveWindow.Selection.Find.Execute

End Sub

如果文档已打开,则Word必须已在运行。在这种情况下,您不希望:

  • 设置wrdApp=CreateObject(“Word.Application”);或
  • 设置wrdDoc=wrdApp.Documents.Open(“C:\xxxxxx.docx”)
您应该首先检查Word是否正在运行,如果正在运行,则检查文档是否已打开。因此:

Sub Demo()
Dim wdApp As Object, wdDoc As Object
Const StrNm As String = "C:\xxxxxx.docx"
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err Then
  Set wdApp = CreateObject("Word.Application")
End If
On Error GoTo 0
With wdApp
  For Each wdDoc In .Documents
    If wdDoc.FullName = "StrNm" Then Exit For
  Next
  If wdDoc Is Nothing Then Set wdDoc = wdApp.Documents.Open(StrNm)
    'to Find & navigate to a particular string
    With wdDoc.Range
      With .Find
        .Text = ActiveCell.Value
        .Execute
      End If
      If .Find.Found = True Then .Select
    End With
    'To navigate to a particular bookmark
    wdDoc.Bookmarks("MyBookmark").Range.Select
End With
End Sub

你好,Macropod和其他助手, 最新的代码是成功的!我把它改了一点,去掉了书签搜索,我很幸运!为了让word文档显示在屏幕上,我使用了shell…我知道这一定会伤害你的眼睛,或者破坏屏幕,但它确实起作用(没有它word保持最小化)。如果有人想让这个更漂亮,我很乐意从中学习。但它奏效了,我很高兴。非常感谢,我很喜欢!非常有用

    Sub Demo()
Dim wdApp As Object, wdDoc As Object
Const StrNm As String = "C:\xxxxxx.docx"
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err Then
  Set wdApp = CreateObject("Word.Application")
End If
On Error GoTo 0
With wdApp
  For Each wdDoc In .Documents
    If wdDoc.FullName = "StrNm" Then Exit For
  Next
  If wdDoc Is Nothing Then Set wdDoc = wdApp.Documents.Open(StrNm)
    With wdDoc.Range
      With .Find
        .Text = ActiveCell.Value
        .Execute
      End With
      If .Find.Found = True Then .Select
    End With
    End With
Shell "C:\WINDOWS\explorer.exe """ & "C:\xxxxxx.docx" & "", vbNormalFocus
End Sub

也许可以尝试“wrdApp.Documents.Content”并在内容中查找值?您的Word相关变量应该是公共的,您应该先进行不同的sub检查文档是否已打开。如果文档未打开,则打开它并执行代码。如果它已经打开,只需激活该文档并执行代码。不久前我回答了一个非常类似的问题:。它是为“另一种方式”的问题编写的,但在从Excel自动化Word时,同样的原则也适用。通读该答案,了解在另一个Office应用程序可能正在运行,也可能未运行,以及文件可能处于打开状态时与之交互的各种方式。您好,Macropod,我想这就是我想要的!!作为一个测试,我制作了一个msgbox,如果找到了文本,它就会工作。但是,我需要word文档显示文本所在的位置。这可能吗?它需要在word文档中导航到和。非常感谢。为什么需要导航到这一点?几乎所有通过代码对文档的编辑都可以在没有代码的情况下完成。在任何情况下,向我们展示您的尝试。这就是全部内容,找到文本的导航。所有这些都意味着要快速导航,因为文档有1000多页和许多书签。我打破我的头只是为了导航。我以前写的代码进行了导航,但无法使用,因为它会一直打开它。你的代码就快到了,你能最后推一下吗?如果你用的是书签,你甚至不需要查找!!!请参阅修订后的代码。您是最好中的最好。我对你感激不尽!非常感谢。