1

Тема: Вставка-замена

Есть код в Worde:
(*259374*) HV_259374:= R_TRIG_86.Q OR F_TRIG_17.Q;
(*259397*) TON_11(NOT HV_259374, TIME01);

Нужен макрос, чтобы выполнял следующее преобразование:
(*259397*) TON_11(NOT R_TRIG_86.Q OR F_TRIG_17.Q, TIME01); т.е. искал в тексте слово, начинающееся с HV_259374 и вставлял вместо него вторую половину.

Я создал макрос через проигрыватель, который выполняет эту операцию, но только для конкретного слова HV_259374. Если в тексте идет другой HV_ХХХХХХ, то этот макрос уже не работает. Как сделать макрос, который будет выполнять замену текста для любого слова?

Вот что получилось у меня, прошу помочь:
Sub Макрос5()
'
' Макрос5 Макрос
'
'
    Selection.MoveRight Unit:=wdWord, Count:=3
    Selection.MoveRight Unit:=wdWord, Count:=3, Extend:=wdExtend
    Selection.Copy
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "HV_259374"
        .Replacement.Text = "R_TRIG_86.Q OR F_TRIG_17.Q"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.MoveRight Unit:=wdWord, Count:=1
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.Copy
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "HV_259379"
        .Replacement.Text = "INT0(IN_STZ_DINT1_2)"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

2

Re: Вставка-замена

Можно без макроса:
    Найти: (<[A-Z_0-9]@)(:=)(*)([; ]@^13*)<\1>
    Заменить: \1\2\3\4\3
    [X] Подстановочные знаки

Ищет текст вида: 
    <Имя>:=<Значение>¶<Текст><Имя>
    где,
    <Имя> - слово из знаков A-Z0-9_
    <Значение> - любой текст
    <Текст> - любой текст, в том числе абзацы

Меняет <Имя>, что в конце, на <Значение>.

Есть нюансы, например в виде пробелов, точки с запятой и др. знаков по краям <Имя> и <Значение>. Что бы их учесть, надо больше примеров.

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

3

Re: Вставка-замена

помогите пожалуйста разобраться. ситуация такая: есть файл docx, с обычным текстом, где по ходу текста очень часто встречается вот такое сочетание: "->". как можно заменить это сочетание, на стрелочку обычную, допустим из Wingdins, с применением команды "Заменить все"?

ОС: WinXP
Office: MS Office 2007

4

Re: Вставка-замена

Вождь пишет:

Можно без макроса:
    Найти: (<[A-Z_0-9]@)(:=)(*)([; ]@^13*)<\1>
    Заменить: \1\2\3\4\3
    [X] Подстановочные знаки

Ищет текст вида: 
    <Имя>:=<Значение>¶<Текст><Имя>
    где,
    <Имя> - слово из знаков A-Z0-9_
    <Значение> - любой текст
    <Текст> - любой текст, в том числе абзацы

Меняет <Имя>, что в конце, на <Значение>.

Есть нюансы, например в виде пробелов, точки с запятой и др. знаков по краям <Имя> и <Значение>. Что бы их учесть, надо больше примеров.

Спасибо конечно, но я не пойму как применить ваш совет на практике. Вот еще пример:
(*275009*) HV_275009:= NOT MAX12CGS01NS.OUT AND NOT TP_11.Q;
(*275005*) HV_275005:= NOT MAX13CGS01NS.OUT AND NOT TP_6.Q;
(*260461*) HV_260461:= OST_1 OR OST_2 OR OST_3 OR OST112;
(*275019*) OST_6:= HV_275009;
(*275019*) TP_OST(HV_260461, TP_OST_T);

Формат строки всегда один и тот же

(*цифры*) HV_XXXXXX:= ЗНАЧЕНИЕ;
(*цифры*) ТЕКСТ:= ТЕКСТ HV_XXXXXX ТЕКСТ;
(*цифры*) ТЕКСТ(ТЕКСТ HV_XXXXXX ТЕКСТ);

Не могли бы вы пояснить как использовать ваш метод замены? Мне бы хотелось ставить курсор в начало строки перед (*цифры*) HV_XXXXXX, нажимать сочетание клавиш и видеть замену в тексте HV_XXXXXX на ЗНАЧЕНИЕ.