Hello Stackoverflow community.
Моя цель - написать макрос, который находит неизвестное имя (или оба имени, написанные так, как "Имя Имя"), и фамилию (или обе фамилии, написанные так, как "Firstsurname-Secondsurname" ) в ранее открытом / активном документе Word - на компьютере будет открыт только один документ Word. Я хочу найти и скопировать имя и фамилию из пункта 2.
Затем макрос должен скопировать это имя и вставить его в ячейку A12 в файле .actives excel. Только одна книга Excel будет открыта на компьютер в то время в пункте 1. = "REGON 364061169, NIP 951-24-09-783,". Это перед именем + фамилией, которую я хочу найти и скопировать - надеюсь, это поможет.
Но также и текст "2 , «непосредственно перед именем + фамилией я хочу скопировать, и хотя во всем контракте строка» 2. «появляется более 20 раз, это 1-й» 2. "вхождение, предшествующее имени + фамилии, которое я хочу скопировать и вставить в ячейку Excel.
Имя + фамилия постоянно изменяется, неизвестно и каждый раз имеет разное количество слов / символов.
Sub FindNames()
'Variables declaration
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim ExcelApp As Excel.Application
Dim MySheet As Worksheet
Dim TextToFind As String
Dim FirstName As String
Dim Rng As Word.Range
Dim StartPos As Long
Dim EndPos As Long
Application.ScreenUpdating = False
TextToFind = "REGON 364061169, NIP 951-24-09-783," 'this text length is 21 caracters
'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
'InStr function returns a Variant (Long) specifying the position of the _
first occurrence of one string within another.
StartPos = InStr(1, Rng, TextToFind) 'here we get 1420, we're looking 4 "TextToFind"
EndPos = InStr(StartPos, Rng, "§ 1. ") 'here we get 2742, we're looking 4 ",00zł"
If StartPos = 0 Or EndPos = 0 Then
MsgBox ("Client's names were not found!")
Else
StartPos = StartPos + Len(TextToFind) 'now start position is reassigned at 1455;
FirstName = Mid(Rng, StartPos, EndPos - StartPos)
End If
'len(Firstname)
End Sub
Это лучшее, что я могу написать, но я не могу выделить только имя + фамилию из большой переменной = FirstName
.
Мой версия кода, предоставленная @PeterT, которая не работает для меня.
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!")
'finding the paragraphs that follow the TextToFind1
Else
For Each Para In Rng.Paragraphs
'how to identify the second paragraph?
'these are not .ListParagraphs, they're normal paragraphs
'If Para.Range.ListParagraphs.Count = 1 Then
If Para.Range.Paragraphs.Count = 2 Then
'how to access the second paragraph?
'If Para.Range.ListFormat.ListValue = 2 Then
'Para.Range.Paragraphs(1).Next(Count:=1).Range
'If Para.Range.Paragraphs.Count = 2 Then
Debug.Print "Name = " & Para.Range.Words(1) & _
", Surname = " & Para.Range.Words(2)
End If
Next Para
End If
Я не могу получить доступ ко второму абзацу и извлечь строку "Michał Łukasz ROESLER".
I ' Я также хотел бы извлечь "Katarzyna Paula STANISZKIS-KRAWCZYK" из третьего абзаца в Rng
. Оба они находятся на первой странице документа.