Страницы: 1
RSS
Замена текста макросом из экселя в ворде, Потеря форматов и стилей Word-документа.
 
Уважаемые коллеги программисты и просто знающие люди!

Подскажите, пожалуйста, как решить проблемку со сбросом формата данных.

В экселе запускаю макрос, который открывает вордовский файл "1.doc".
В вордовском документе мы производим замену текста "!Value1" на текст "ЗАМЕНА СДЕЛАНА".
Файл открывается и текст заменяется. Но! Теряется формат текста в вордовском документе.

Я использую объектную модель и делаю замену именно в параметре содержащем чистый текст:  objDocument.Content.Text
Если я правильно это понимаю.
Я не очищаю формат документа или формат данных принудительно.

Вопрос, как заменить только чистый текст, чтобы стили и форматы в документе остались?
Может быть можно как-нибудь сохранять формат и позже восстанавливать? Не пойму почему сбрасываются стили и форматы.

PS (слияние не предлагать =))

Буду благодарен за помощь!


Office 2007

Код
Private Sub toWord_Click()

    Set objWord = CreateObject("Word.Application")
    If Err.Number Then
       MsgBox "Can't open Word."
       Exit Sub
    End If
    
    pt = "C:\Автоматизация\1.doc"
    Set objDocument = objWord.Documents.Open(Filename:=pt)
    ' здесь мы получили исходный документ

    objDocument.Content.Text = Replace(objDocument.Content.Text, "!Value1", "ЗАМЕНА СДЕЛАНА")
    ' после замены текста в документе стили слетают

    objWord.Visible = True 'отображаем документ
    
    Set myRange = Nothing
    Set objDocument = Nothing
    Set objWord = Nothing
        
End Sub
Изменено: iScalper - 06.08.2015 17:16:05
 
iScalper, забыли вордовский файл приложить, с которым проблема.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Это очень простой файл.
Прикрепляю.
 
Может так устроит.
Скрытый текст
Код исправил. Константы ворда (в коде wdFindContinue, wdReplaceAll) эксель не видит. Заменил их на числовые значения. Помогла понять это тема отсель.
Изменено: JayBhagavan - 06.08.2015 18:35:17

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, спасибо за быстрый ответ!

Стили остались прежними, не сбились, это очень хорошо!
Но значение !Value1 не изменилось. Замена текста не происходит.
 
iScalper, да, а слона то я и не заметил. Почему не срабатывает не понимаю. Зацепило. Попробовал так:
Код
    For Each w In objWord.ActiveDocument.Words
'        Debug.Print w.Text
        If w.Text Like "текст" Then w.Text = "ЗАМЕНА СДЕЛАНА"
    Next w
Сработало, но если менять "!Value1", то не сработает, т.к. "!" и "Value1" - это разные слова. В общем при желании можно разобраться. Пытаемся дальше...

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, выражаю Вам огромную благодарность!
С этим вариантом уже можно работать.
Приятно удивлен таким быстрым ответом! Спасибо, ещё раз!

Если Вам удастся найти более красивое решение, то рад буду на него взглянуть. В наш век автоматизации подобные штуки ещё сотню раз нам пригодятся в работе.
Изменено: iScalper - 07.08.2015 11:11:51
 
iScalper, я в макросах ещё чайник и ворд из экселя не мучаю. Всё дело в бычьей упёртости. Пост №4 - исправил код + комментарий.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
А что, встроенные средства Word-а никак нельзя использовать?
Код
Private Sub toWord_Click() 
    Set objWord = CreateObject("Word.Application")
    If Err.Number Then
       MsgBox "Can't open Word."
       Exit Sub
    End If
     
    pt = "C:\Автоматизация\1.doc"
    Set objDocument = objWord.Documents.Open(Filename:=pt)
    ' здесь мы получили исходный документ
 
    objDocument.Content.Find.Execute "!Value", False, False, False, False, False, True, 1, False, "ЗАМЕНА СДЕЛАНА", 2
    ' после замены текста стили не слетают
 
    objWord.Visible = True 'отображаем документ
     
    Set myRange = Nothing
    Set objDocument = Nothing
    Set objWord = Nothing
         
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, если бы мы про них знали... :) а так поиск и макрорекордер мне такого не показали. Спасибо. _/\_

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
The_Prist написал:
objDocument.Content.Find.Execute "!Value", False, False, False, False, False, True, 1, False, "ЗАМЕНА СДЕЛАНА", 2
Спасибо!
Работает как нужно.
 
Вопрос снят.
Изменено: mikhail_00000001 - 22.01.2024 17:11:22
 
Вопрос не соответствует названию темы и профилю форума.

P.S. На форуме все знают, кто такой Михаил Первый.  :D
Владимир
 
:D  
Изменено: mikhail_00000001 - 22.01.2024 18:08:50
Страницы: 1
Читают тему
Наверх