Активируйте / выберите слово-документ и найдите значение активной ячейки в этом документе. - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу выбрать ячейку и использовать текст-значение в этой ячейке для поиска / поиска в конкретном c словесном документе (xxxxxx.docx). Этот документ уже открыт вместе с другими текстовыми документами.

Код внизу делает то, что я хочу ... почти. Он ОТКРЫВАЕТ указанный документ c, а затем находит текст. Но документ уже открыт, поэтому он не работает хорошо для работы. Его просто нужно выбрать / активировать и больше не открывать.

Кто-нибудь знает, как управлять этим: выберите любую ячейку, используйте значение в этой ячейке, активируйте / выберите 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

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Если документ уже открыт, значит, Word уже должен быть запущен. В этом случае вам не нужно:

  • Set wrdApp = CreateObject ("Word.Application"); или
  • Установить wrdDo c = 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 голосов
/ 25 февраля 2020

Здравствуйте, Macropod и другие помощники! Новейший код удался! Я немного изменил его, убрав поиск по закладкам, и мне повезло! Чтобы заставить текстовый документ отображаться на экране, я использовал оболочку ... Я знаю, что это должно повредить ваши глаза или сломать экран, но это работает (без этого 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
...