Добрый день. В тексте имеется большое количество слов типа рис.1а, рис.2а и... рис.nа (n-цифра) нужно заменить на рис.1б, рис.2б и... рис.nб (соответственно, чтобы не изменялась цифра) Спасибо.
Добрый день. В тексте имеется большое количество слов типа рис.1а, рис.2а и... рис.nа (n-цифра) нужно заменить на рис.1б, рис.2б и... рис.nб (соответственно, чтобы не изменялась цифра) Спасибо.19kip
Anton1013, Цифры трогать не надо, а менять только буквы. Нужно ка-кто "пометить цифру", чтобы её не затрагивать Что-то типа рис.*а, заменить на рис.*б и в тексте сделалось n-ое количество замен.
Anton1013, Цифры трогать не надо, а менять только буквы. Нужно ка-кто "пометить цифру", чтобы её не затрагивать Что-то типа рис.*а, заменить на рис.*б и в тексте сделалось n-ое количество замен.19kip
19kip, На сколько я знаю, вроде бы есть возможность заменить 1 букву на символ, и он ее не будет учитывать при замене. Только не в курсе как его приписать. А так, если рисунков не очень много можно быстро пробежаться по каждому.
19kip, На сколько я знаю, вроде бы есть возможность заменить 1 букву на символ, и он ее не будет учитывать при замене. Только не в курсе как его приписать. А так, если рисунков не очень много можно быстро пробежаться по каждому.Anton1013
Sub Мяв() With CreateObject("VBScript.RegExp") .Global = True: .IgnoreCase = False: .MultiLine = False .Pattern = "(рис.\d+)а" If .test(ActiveDocument.Range.Text) Then s = .Replace(ActiveDocument.Range.Text, "$1b") ActiveDocument.Range.Text = s End If End With End Sub
[/vba]
[vba]
Код
Sub Мяв() With CreateObject("VBScript.RegExp") .Global = True: .IgnoreCase = False: .MultiLine = False .Pattern = "(рис.\d+)а" If .test(ActiveDocument.Range.Text) Then s = .Replace(ActiveDocument.Range.Text, "$1b") ActiveDocument.Range.Text = s End If End With End Sub
Sub Замена() Dim w As Range, t As String 'Первое слово в тексте Set w = ActiveDocument.Words.First Do Until w Is Nothing 'перебираем до конца документа 'Поскольку "рис.1а" для Ворда - три слова 'то набираем выражение постепенно t = t & w.Text If t Like "рис.#а" Then 'Если мы нашли искомое, заменяем последний знак в текущем обрабатываемом слове w.Text = Mid(t, Len(t) - 1, 1) & "б" ElseIf t <> "рис" And t <> "рис." Then 'Очень важно вовремя очищать временную переменную от "мусора" t = "" End If 'Переходим к следующему слову в документе Set w = w.Next(Unit:=wdWord, Count:=1) Loop End Sub
[/vba] Важно: не применяйте выражения Words(i) - очень медленно!
А так не портит форматирование: [vba]
Код
Sub Замена() Dim w As Range, t As String 'Первое слово в тексте Set w = ActiveDocument.Words.First Do Until w Is Nothing 'перебираем до конца документа 'Поскольку "рис.1а" для Ворда - три слова 'то набираем выражение постепенно t = t & w.Text If t Like "рис.#а" Then 'Если мы нашли искомое, заменяем последний знак в текущем обрабатываемом слове w.Text = Mid(t, Len(t) - 1, 1) & "б" ElseIf t <> "рис" And t <> "рис." Then 'Очень важно вовремя очищать временную переменную от "мусора" t = "" End If 'Переходим к следующему слову в документе Set w = w.Next(Unit:=wdWord, Count:=1) Loop End Sub
[/vba] Важно: не применяйте выражения Words(i) - очень медленно!Skif-F