1

Тема: Как работает .Range.Find.Execute?

Здравствуйте. Интересует следующий вопрос.
Почему

Set p1 = Selection.Paragraphs(2).Range
p1.Find.Text = "110"
p1.Find.Replacement.Text = "!!!"
p1.Find.Execute Replace:=wdReplaceOne

работает, а

Selection.Paragraphs(2).Range.Find.Text = "110"
Selection.Paragraphs(2).Range.Find.Replacement.Text = "!!!"
Selection.Paragraphs(2).Range.Find.Execute Replace:=wdReplaceOne

нет. Спасибо.

2

Re: Как работает .Range.Find.Execute?

o5andrey пишет:

Здравствуйте. Интересует следующий вопрос.
Почему

Set p1 = Selection.Paragraphs(2).Range
p1.Find.Text = "110"
p1.Find.Replacement.Text = "!!!"
p1.Find.Execute Replace:=wdReplaceOne

работает, а

Selection.Paragraphs(2).Range.Find.Text = "110"
Selection.Paragraphs(2).Range.Find.Replacement.Text = "!!!"
Selection.Paragraphs(2).Range.Find.Execute Replace:=wdReplaceOne

нет. Спасибо.

Всё работает
Ваш вид проще сделать так

With Selection.Paragraphs(2).Range.Find
    .Text = "110"
    .Replacement.Text = "!!!"
    .Execute Replace:=wdReplaceOne
End With

А ещё компактнее вот так

Selection.Paragraphs(2).Range.Find.Execute FindText:="110", ReplaceWith:="!!!", Replace:=wdReplaceOne

А вот так будет верняк:

If Selection.Range.Paragraphs.Count >= 2 Then
Selection.Paragraphs(2).Range.Find.Execute FindText:="110", ReplaceWith:="!!!", Replace:=wdReplaceOne
End If

Скорее всего у вас там не было двух предложений или текст был заменён.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

3

Re: Как работает .Range.Find.Execute?

Скорее всего у вас там не было двух предложений или текст был заменён.

А вот и нет, мой второй случай не работает. Вы проверили, у вас идёт?

4

Re: Как работает .Range.Find.Execute?

Вечером проверю ещё раз.

5

Re: Как работает .Range.Find.Execute?

o5andrey пишет:

Вечером проверю ещё раз.

Да, проверил

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

6

Re: Как работает .Range.Find.Execute?

Я проверил на другом ПК

Sub Test2()
Selection.Paragraphs(2).Range.Find.Text = "110"
Selection.Paragraphs(2).Range.Find.Replacement.Text = "!!!"
Selection.Paragraphs(2).Range.Find.Execute Replace:=wdReplaceOne
End Sub

Sub Test3()
Set a = Selection.Paragraphs(2).Range
a.Find.Text = "110"
a.Find.Replacement.Text = "!!!"
a.Find.Execute Replace:=wdReplaceOne
End Sub

Test2 не работает.

Post's attachments

110.docm 15.4 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

7

Re: Как работает .Range.Find.Execute?

С "With - End With" тоже работает, а вот без всяких свёрток не работает. В общем, я объяснил это себе как глюк объекта и метода Find.Execute; как глюк Word.

8

Re: Как работает .Range.Find.Execute?

Блин, ребята, вы синтаксис VBA то сначала выучите smile
Целая дискуссия из-за элментарной ошибки!

Каждый раз, когда вы пишите:

Selection.Paragraphs(2).Range

Создается новая переменная, по типу With.
Которая убивается, после выполнения команды smile

Макросы под заказ и готовый пакет - mtdmacro.ru

9

Re: Как работает .Range.Find.Execute?

Вождь пишет:

Блин, ребята, вы синтаксис VBA то сначала выучите smile
Целая дискуссия из-за элментарной ошибки!

Каждый раз, когда вы пишите:

Selection.Paragraphs(2).Range

Создается новая переменная, по типу With.
Которая убивается, после выполнения команды smile

Спасибо. На счёт повторного использования Selection.paragraph(2).Range не видел или не обратил внимания на подобное. Разумеется, следует пользоваться оригинальными конструкциями.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

10

Re: Как работает .Range.Find.Execute?

Рад что вам всё ясно. Но будьте любезны, поясните мне.

Создается новая переменная, по типу With.

Это как?

11

Re: Как работает .Range.Find.Execute?

Поясню, так как это вопрос почему-то оказался не очевидным форумчанам smile

Определение Range то читали? Range – представляет какую-то непрерывную область документа. То бишь, главное запомнить, что Range всегда относится к документу. Не к Selection, Paragraph или чему другому, а именно к документу. Так же, Range – это объект (читаем что это такое и как с ними работать).

Здесь свойство Range вернуло вам область документа, соответствующую второму выбранному абзацу:

Selection.Paragraphs(2).Range

Не ссылку на объект, а именно объект. Если бы вы запомнили этот объект Range, то работали бы с ним и дальше. Например:

Set R = Selection.Paragraphs(2).Range

Вы не сделали этого, и объект был удален сразу, после выполнения строки кода:

Selection.Paragraphs(2).Range.Find.Text = "110"

Следующий вызов вернул еще один новый объект Range. И так далее.

Если ничего не поняли, значит изучение даже основ VBA вы посчитали лишним, а сразу решили попробовать smile Почитайте какую книжку с примерами, можно и справку глянуть. Главное - читать с начала и подряд. Изучая основы (чего бы то ни было) бессистемным образом (на форумах) люди гробят свое и чужое время. Как говорится: У семи нянек дитя без глазу smile

Макросы под заказ и готовый пакет - mtdmacro.ru

12

Re: Как работает .Range.Find.Execute?

Вождь пишет:

Если ничего не поняли, значит изучение даже основ VBA вы посчитали лишним, а сразу решили попробовать smile Почитайте какую книжку с примерами, можно и справку глянуть. Главное - читать с начала и подряд. Изучая основы (чего бы то ни было) бессистемным образом (на форумах) люди гробят свое и чужое время. Как говорится: У семи нянек дитя без глазу smile

Фе, какой вы сноб. Читать сначала и подряд - ужасно скучно. Считаю, что для VBA достаточно читать справку при составлении кода, но читать стоит внимательно.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

13

Re: Как работает .Range.Find.Execute?

Fck_This пишет:

...вы сноб...

Да, зануда еще тот smile Программеров других не бывает, все строго по алгоритму smile

Макросы под заказ и готовый пакет - mtdmacro.ru

14

Re: Как работает .Range.Find.Execute?

Здравствуйте. Подскажите пожалуйста как расширить диапазон на одно слово.
Set r1 = Selection.Paragraphs(1).Range

r1.Find.Text = ChrW(34)
r1.Find.Execute 
If r1.Find.Found = True Then
    r1.Expand Unit:=wdWord
    MsgBox (r1)
End If

В окошке только одна кавычка.

15

Re: Как работает .Range.Find.Execute?

o5andrey пишет:

...расширить диапазон на одно слово...

Например так:

R1.Find.Text = ChrW(34)
R1.Find.Execute
If R1.Find.Found = True Then
    R1.Expand Unit:=wdWord
    R1.MoveStart wdWord, wdBackward
    R1.MoveEnd wdWord, wdForward
    MsgBox (R1)
End If
Макросы под заказ и готовый пакет - mtdmacro.ru

16

Re: Как работает .Range.Find.Execute?

Например так...

Не выходит. Так берётся весь текст: от кавычки до начала и до конца. Мне нужно чтобы в окошке появилось слово, которое в кавычках.

17

Re: Как работает .Range.Find.Execute?

В справке есть примеры:

Set myRange = ActiveDocument.Words(1)
myRange.Expand Unit:=wdParagraph
Set Range1 = ActiveDocument.Paragraphs(1).Range
With Range1
    .Collapse Direction:=wdCollapseStart
    .Move Unit:=wdParagraph, Count:=3
    .Select
End With

Но почему-то у меня приведённое аналогичное не проходит...

18

Re: Как работает .Range.Find.Execute?

Вот с этой строчкой получилось:

r1.MoveEnd Unit:=wdWord, Count:=1

19

Re: Как работает .Range.Find.Execute?

With Selection.Paragraphs(1).Range
    .Find.Text = ChrW(34)
    .Find.Execute
    If .Find.Found = True Then
        .MoveEnd Unit:=wdWord, Count:=1
        MsgBox (.Text)
    End If
End With

20

Re: Как работает .Range.Find.Execute?

Как сделать чтобы при этом поиске находилась именно кавычка заданного кода UTF-8? А то не делается различий между кавычками в виде двух верхних чёрточек и

21

Re: Как работает .Range.Find.Execute?

Как сделать чтобы при этом поиске находилась именно кавычка заданного кода UTF-8? А то не делается различий между кавычками в виде двух верхних чёрточек и "кавычками-ёлочками": находятся и те и другие (этот поиск работает этим по двум видам кавычек).

22

Re: Как работает .Range.Find.Execute?

Я думаю, что Вы не правы. Пишите мне в PM, обсудим.