Найти уникальный текст в слове do c и скопировать последовательную строку из этого слова do c, из excel vba - PullRequest
0 голосов
/ 23 января 2020

Моя цель - найти уникальный текст в текстовом документе «Экономика Северной Ирландии» и скопировать три последовательных слова из этого документа. И я должен сделать это из Excel VBA. Документ Word, в котором выполняется поиск, будет открыт вручную перед выполнением кода VBA из файла .xlsm. Это будет единственный открытый файл .docx во время выполнения кода VBA, но имя файла всегда будет другим, поэтому мы не можем жестко закодировать ни имя файла .docx, ни путь.

Sub Find_Price()

    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim TextToFind As String
    Dim NumberToFind As String
    Dim Rng As Word.Range
    Application.ScreenUpdating = False
    'This is the text I'm looking for in .ActiveDocument
    TextToFind = "The economies of Northern Ireland "
    NumberToFind = "82110907192"
    'Reference already opened Word document from excel VBA console
    Set WordApp = GetObject(, "Word.Application")
    WordApp.Application.Visible = True
    WordDoc.Select
    Set Rng = WordApp.ActiveDocument.Content
    'Set WordDoc = WordApp.Documents.Open(FilePath & "Form1.docx")
    'Set WordDoc = WordApp.ActiveDocument     'I don't know how to finish this line  :-(
        'With WordApp.Content.Find.Execute.NumberToFind
        With WordDoc.Content.Find.Execute.NumberToFind     'Code crashes in this line;
        Rng.Find.Execute FindText:=TextToFind, Forward:=True
                'what this "Forward:=True" means??
        If Rng.Find.Found Then
            If Rng.Information(wdWithInTable) Then
               ' I don't know how to write this part of the code.
               ' Please don't remove my question again - I've researched 16h for this info.
               MsgBox "Price is " & TextToFind & " pln."
            End If
        Else
            MsgBox "Text was not found!"
        End If
End Sub

Код вылетает в этой строке:

With WordDoc.Content.Find.Execute.NumberToFind

enter image description here

Самое важное для меня:

1) выполнить поиск в данный момент открытое слово do c, из редактора Excel vba,

2) найдите уникальный текст = "Экономика Северной Ирландии" в этом документе слова,

3) и скопируйте этот текст в буфер обмена, чтобы я мог вручную вставить его в ячейку по своему выбору.

1 Ответ

3 голосов
/ 23 января 2020

Поиск в диапазоне.

With Rng.Find
    .Text = "The economies of Northern Ireland "
    .Execute
    If .Found = True Then
        Rng.MoveEnd wdWord, 3
        Rng.Copy
    Else
        MsgBox "Not found"
    End If
End With

Если документ word уже открыт (и вы уверены, что он будет открыт каждый раз), то я просто лениво объявляю переменные.

Dim oDoc as Word.Document
Set oDoc = Word.ActiveDocument
Dim oRng as Word.Range
Set oRng = oDoc.Content

Но это мое личное мнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...