Excel 激活/选择word文档并查找该文档中活动单元格的值
我想选择一个单元格,并使用该单元格中的值文本在特定word文档(xxxxxx.docx)中搜索/查找。此文档已与其他word文档一起打开 下面的代码实现了我想要的…几乎。它打开特定文档,然后查找文本。但是文档已经打开了,所以它不适合这个工作。它只需要被选择/激活,而不需要再次打开 是否有人知道如何进行管理:选择任何单元格,使用该单元格中的值,激活/选择xxxxxx.docx,然后搜索该值 **最重要的是,找到的文本显示在文档中,文档必须在屏幕上显示/弹出。所有这些都是为了在本文档中快速导航Excel 激活/选择word文档并查找该文档中活动单元格的值,excel,vba,search,ms-word,find,Excel,Vba,Search,Ms Word,Find,我想选择一个单元格,并使用该单元格中的值文本在特定word文档(xxxxxx.docx)中搜索/查找。此文档已与其他word文档一起打开 下面的代码实现了我想要的…几乎。它打开特定文档,然后查找文本。但是文档已经打开了,所以它不适合这个工作。它只需要被选择/激活,而不需要再次打开 是否有人知道如何进行管理:选择任何单元格,使用该单元格中的值,激活/选择xxxxxx.docx,然后搜索该值 **最重要的是,找到的文本显示在文档中,文档必须在屏幕上显示/弹出。所有这些都是为了在本文档中快速导航 Su
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”)
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多页和许多书签。我打破我的头只是为了导航。我以前写的代码进行了导航,但无法使用,因为它会一直打开它。你的代码就快到了,你能最后推一下吗?如果你用的是书签,你甚至不需要查找!!!请参阅修订后的代码。您是最好中的最好。我对你感激不尽!非常感谢。