Я вставил сюда среднюю часть большего кода, чтобы вы, ребята, могли видеть его большую часть, но строка, которая вызывает у меня некоторые проблемы, находится во второй части и выглядит следующим образом: Set wordRng2 = ActiveDocument.Paragraphs(parNmbr).Range(Start:=startPos, End:=endPos)
.
Есть очень большой документ, в котором примерно 200 абзацев. Поэтому, используя wordRng.SetRange Start:=ActiveDocument.Paragraphs(parNmbr).Range.Start, End:=ActiveDocument.Paragraphs(parNmbr).Range.End
, я извлекаю 23-й абзац и делаю из него диапазон. В этом абзаце есть данные, которые мне нужны. Это дата, но написанная словом месяц в Poli sh, поэтому ее трудно извлечь с помощью подстановочных знаков слов.
У меня есть несколько постоянных слов, которые всегда находятся в одном месте в этом абзаце . Я назначаю их переменным textToFind1
и textToFind2
.
Строка, которую я хочу извлечь из этого абзаца, находится прямо между этими двумя переменными - возможно, с одним пробелом в начале и конечным пробелом в конце также, но это там.
With wordRng.Find
.Text = "<[A-Z]{3} [0-9]{6}>" 'you can use the tags < and > to mark the start and end of a word, respectively.
.MatchWildcards = True 'these wildcards refer to polish ID number that is: ABC 123456 or BCF 765432 - it works fine;
.MatchCase = False 'this part of the code works fine;
.Wrap = wdFindStop
.Forward = True
.Execute
If .Found = True Then
idNmbr = wordRng
idNmbr = Trim$(idNmbr)
intCol = Application.WorksheetFunction.match("nr_dokumentu", Worksheets("data").Range("1:1"), 0) 'Range("1:1") is row 1.
mySheet.Cells(lngRow, intCol) = idNmbr 'lngRow = lngRow + 1.
End If
End With
'InStr function returns a Variant (Long) specifying the position of the first occurrence of one string within another.
wordRng.SetRange Start:=ActiveDocument.Paragraphs(parNmbr).Range.Start, End:=ActiveDocument.Paragraphs(parNmbr).Range.End
Debug.Print wordRng
startPos = InStr(1, wordRng, textToFind1) - 1 'here we get 217, we're looking 4 id validity date;
endPos = InStr(startPos, wordRng, textToFind2) - 1 'here we get 247, we're looking 4 id validity date;
Set wordRng2 = ActiveDocument.Paragraphs(parNmbr).Range(Start:=startPos, End:=endPos) 'Set myRange = ActiveDocument.Range(Start:=pos, End:=pos2)
'Wrong number of arguments or invalid property assignment error.
'at the moment "wordRng2" variable holds long date with month written as a word = października, listopada, grudnia;
Debug.Print wordRng
Debug.Print wordRng2
wordRng2 = Trim$(wordRng2)
Debug.Print wordRng2
Я установил вторую переменную диапазона, которая должна содержать именно ту строку, которую мне нужно извлечь, с возможным конечным пробелом в конце. Но строка, которую я использую для этого: Set wordRng2 = ActiveDocument.Paragraphs(parNmbr).Range(Start:=startPos, End:=endPos)
возвращает ошибку «Неверное количество аргументов или недопустимое присвоение свойств».
В примере, который я пробую, он должен содержать 18 или 19 символов.

Даже если я изменю это ошибочная строка в:
Set wordRng2 = ActiveDocument.Paragraphs(parNmbr).Range
wordRng2.SetRange Start:=startPos, End:=endPos
все же я получаю строку между 217 и 247 позициями от начала всего документа, а не строку между этими значениями в 23-м абзаце.