激活/选择一个单词文档并在该文档中找到活动单元格的值

问题描述 投票:-1回答:2

我想选择一个单元格并使用该单元格中的值文本来搜索/查找特定的字词文档(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
excel vba search ms-word find
2个回答
1
投票

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

  • Set 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

0
投票

Hello Macropod和其他助手,最新的代码成功了!我稍作改动,取出了书签,很幸运!为了使Word文档在屏幕上显示,我使用了外壳……我知道这一定会伤到您的眼睛,或者打碎屏幕,但是确实可以(如果没有,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
© www.soinside.com 2019 - 2024. All rights reserved.