Объедините знаки, найдите текст в Word do c и Range.MoveEndUntil Cset: = знак абзаца & "2" & "." - PullRequest
0 голосов
/ 28 января 2020

У меня есть этот макрос, который запускается из редактора Excel VBA, и он ищет строки в документе Word, копирует эту строку и вставляет ее в ячейку в .Activesheet.Range ("E27")

Итак, у меня есть этот код, и я уже так близок к тому, чтобы заставить его работать, но мне нужно объединить четыре символа, чтобы он работал, знак абзаца (¶), & "2" & "."

Sub AdjusFindFirstName()
    Sub AdjFindFirstName()
    'Variables declaration
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim ExcelApp As Excel.Application
    Dim Rng As Word.Range

    Dim ws As Worksheet
    Dim TextToFind As String
    Dim ApartmentPrice As String
    Dim StartPos As Long
    Dim EndPos As Long
    Dim FullName As String
    Application.ScreenUpdating = False

    'Assigning object variables
    Set WordApp = GetObject(, "Word.Application")
    Set WordDoc = WordApp.ActiveDocument
    Set Rng = WordApp.ActiveDocument.Content
    'Searching
    With Rng.Find
    '.Text = TextToFind
    .Text = "REGON 364061169, NIP 951-24-09-783,"
    .Execute    '?Rng = REGON 364061169, NIP 951-24-09-783,
        If .Found = True Then
            Rng.MoveEndUntil Cset:="2" & ". "  'expands Rng variable until first "2. "                  
            Rng.MoveEnd wdWord, 3          'expands Rng variable wdWord, 3 further
                                           'wdParagraph, wdLine, wdSentence, wdScreen
            If Rng.Words.Last.Next.Text = "-" Then    'I want the text of the word following the last word in my range
               Rng.MoveEnd wdWord, 2    'expands Rng variable wdWord, 2 further
            End If
            StartPos = InStr(1, Rng.Text, "2. ")
            FullName = Mid(Rng.Text, StartPos + 3)
        End If
    End With
    Debug.Print FullName
End Sub

In факт, что я даже не могу выполнить Range.MoveEndUntil Cset:= "2. "

Я даже пытался Range.MoveEndUntil Cset:= "2" & ". "

Эти строки не расширяют мою переменную Rng ни одним словом или символом.

Но что Мне действительно нужно найти / MovingEndUntill Cset:= "¶" & "2" & ". "

Вот экран печати, где я выбрал нужную мне строку .MoveEndUntil

enter image description here

Может быть, вы могли бы рассказать, как расширить мою переменную Rng до конца текущего абзаца?

1 Ответ

2 голосов
/ 28 января 2020

Внимательное чтение справки topi c для MoveEndUntil показывает, что она смотрит только на отдельные символы, а не комбинации символов:

Перемещает конечную позицию указанного диапазона до тех пор, пока в документе не будут найдены указанных символов.

Не существует метода «Перемещение», который бы работал таким образом. Однако функция Word Find позволяет находить комбинации символов. Добавление дополнительного Find, который начинается с первого «найденного» термина, находит информацию, указанную в вопросе. Например

Dim WordDoc As Word.Document
Dim rngStart As Word.Range, rngEnd As Word.Range

Set WordDoc = WordApp.ActiveDocument
Set rngStart = WordDoc.Content
'Searching
With rngStart.Find
'.Text = TextToFind
    .Text = "REGON 364061169, NIP 951-24-09-783,"
    .Execute    '?Rng = REGON 364061169, NIP 951-24-09-783,
    If .found = True Then
        'Instantiate a Range for the next search, starting with the first "found"
        Set rngEnd = rngStart.Duplicate
        'Extend that range to the end of the document
        rngEnd.End = WordDoc.Content.End
        With rngEnd.Find
            .Text = vbCr & "2. "
            .Forward = True
            .Execute
            If .found Then
                rngEnd.MoveEnd wdWord, 3
                If rngEnd.Words.Last.Next.Text = "-" Then    'I want the text of the word following the last word in my range
                    rng.MoveEnd wdWord, 2    'expands Rng variable wdWord, 2 further
                End If
            End If
        End With

        startPos = InStr(1, rngEnd.Text, "2. ")
        FullName = Mid(rngEnd.Text, startPos + 3)
    End If
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...