Перво наперво: макрос запускается из редактора Excel VBA, но выполняет большую часть своей работы над ранее открытым документом Word, где его цель - найти полные имена людей, которые являются договаривающимися сторонами в анализируемое соглашение.
Проблема, с которой я столкнулся при работе с кодом, заключается в том, что это переменное количество слов, которое мне нужно извлечь из каждого последующего абзаца. Если зовут Уилл СМИТ, то два слова, которые мне нужно вытащить, когда это Карр ie Энн МОСС, тогда это три слова, иногда это может быть Анна Николь СМИТ БЕРК, чем четыре слова, но когда это Анна Николь СМИТ… BURKE, чем его пять слов и т. Д.
Другая идея получить это полное имя состоит в том, что оно всегда заканчивается комой, и эта кома всегда является первой комой в этой абзац, где появляется полное имя.
ВНИМАНИЕ !!! Параграфы, с которыми мы работаем, не ListParagraphs
. Они нормальные / обычные, хотя с отступом и номером. Я получаю эти контракты от людей, которые не хотят использовать нумерованный список: - (
Так в последний раз: нумерованный список не включен в тех абзацах, с которыми мы работаем.
Вот как это выглядит как в Word, а выбранные слова - это имена и фамилии, которые макрос должен извлечь из документа - исключая кому после последней фамилии.
Sub FindNamesCleanDraftWithLoop()
'Variables declaration
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim ExcelApp As Excel.Application
Dim MySheet As Excel.Worksheet
Dim Para As Word.Paragraph
Dim Rng As Word.Range
Dim RngStart As Word.Range
Dim RngEnd As Word.Range
Dim TextToFind1 As String
Dim TextToFind2 As String
Dim firstName As String
Dim startPos As Long
Dim endPos As Long
Application.ScreenUpdating = False
'Assigning object variables
Set WordApp = GetObject(, "Word.Application")
Set ExcelApp = GetObject(, "Excel.Application")
Set WordDoc = WordApp.ActiveDocument
Set MySheet = Application.ActiveWorkbook.ActiveSheet
'Set MySheet = ExcelApp.ActiveWorkbook.ActiveSheet
Set Rng = WordApp.ActiveDocument.Content
TextToFind1 = "REGON 364061169, NIP 951-24-09-783,"
TextToFind2 = "- ad."
'InStr function returns a Variant (Long) specifying the position of the first occurrence of one string within another.
startPos = InStr(1, Rng, TextToFind1) - 1 'here we get 1421, we're looking 4 "TextToFind1"
endPos = InStr(1, Rng, TextToFind2) - 1 'here we get 2246, we're looking 4 "- ad."
If startPos = 0 Or endPos = 0 Then Exit Sub
Rng.SetRange Start:=startPos, End:=endPos
Debug.Print Rng.Paragraphs.Count
If startPos = 0 Or endPos = 0 Then
MsgBox ("Client's names were not found!")
Else
'somewhere here I need your help to write some lines that will
'recognize how many words need to be pulled to extract the full
'name/names + surname/surnames and nothing else - we end on the first coma.
For Each Para In Rng.Paragraphs
firstName = Trim$(Para.Range.Words(3))
Debug.Print Para.Range.Words(1) & Para.Range.Words(2) & _
Para.Range.Words(3) & Para.Range.Words(4) & _
Para.Range.Words(5) & Para.Range.Words(6)
Next Para
End If
End Sub
Там, в For Each Para ... Next Para
l oop, мне нужна ваша помощь, чтобы написать несколько строк, которые распознают, сколько слов нужно извлечь, чтобы извлечь полное имя / имена + фамилию / фамилии и ничего больше - мы заканчиваем первой комой - это означает исключение комы после последней фамилии.