Страницы: 1
RSS
Замена части текта в колонтитуле на листе Word программно из VBA на другой текст из Excel
 
Доброй ночи форумчане!
Всё, я сломался. Пол дня уже ковыряюсь, но так и не смог найти того, что мне нужно.
Проблема: нужно из VBA-проекта в Excel-файле заменить известное словосочетание в верхнем колонтитуле уже имеющегося doc-документа. При чём в данном документе имеется два раздела и два разных колонтитула - верхних. Активация Word и открытие документа без вопросов, в том числе и разделов. Замена в тексте страницы тоже без проблем. Замена из VBA-проекта из Word - тоже без проблем. А вот из Excel-проекта - проблема. К поиску не отправляйте - отъимел уже наверно всё что можно в Инете, в т.ч. и майкрософт руководство. Код не выставляю, т.к. там уже полная каша. Ткните меня где найти ответ на мой вопрос или пример хотя бы какой скинте. Заранее буду благодарен.
 
На сайте excel-vba есть полезная статья, где подробно рассказывается, как обратиться из приложения excel к word. Забил в поиск фразу "как обратиться из excel к word"  получил третью ссылку: вот эту. Попробуйте (третий ответ сверху).
Кому решение нужно - тот пример и рисует.
 
не, не, не то. я уже достучался до этого. Всё нормально открываю. Это без проблем. А вот достучаться до колонтитула именно из Excel&VBa не получается. Не понимаю в чём проблема. Не понимаю как колонтитул открыть для редактирования. Рекодер из Word не помогает, т.к. он для VBA&Word. При чём колонтитул представляет из себя таблицу Word.
 
Ну так колонтитул - это объект Word. Как к нему обратиться - можно записать рекордером в Word. А потом, изучив, как обратиться к приложению Word из Excel - делаем тоже самое из Excel (подключив библиотеку, или без подключения - это уж как удобнее).
Кому решение нужно - тот пример и рисует.
 
Библиотеку подключил. Макрос, записанный рекодером не работает в проекте VBA&Excel. Поэтому и вопрос задал.
 
Ну, если тупо переносить макрос из Word в Excel - скорее всего, не сработает. Я вот записал в Word макрос, подключил в Excel библиотеку, чуток подшаманил (может, чего лишнего оставил, но, тем не менее):
Код
Sub T()
Dim objW As Word.Application'переменная для приложения
Dim objWd As Word.Document 'переменная для документа
    Set objW = New Word.Application 'устанавливаем переменным значения
    Set objWd = objW.Documents.Add
    objW.Visible = True 'показываем созданную красоту
    objWd.Activate 'это вот фиг знает, надо или нет, скорее всего - надо
'дальше - тупо повторяю макрос из Word, только спереди указываю переменную документа
    objWd.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    objWd.ActiveWindow.Selection.TypeText Text:="Это - новый колонтитул."
    objWd.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub

В результате макрос создает новый сеанс Word, создает в нем новый документ и в верхний колонтитул записывает многозначительную фразу. А потом переключается в обычный вид ввода текста.
Кому решение нужно - тот пример и рисует.
 
Спасибо за участие в моей проблеме, но это не совсем то - это прога просто новый колонтитул вставляет.
А мне нужно чтобы в существующем файле Docx меняла часть текста.
Вот пример: из файла Книга1 нужно значение в ячейке А1 "12345" взять и заменит на него значение в колонтитуле "[1]"  в файле Doc2.xlsx
 
Вставьте в колонтитул закладку и работайте с ней (UpdateBookmarks)
 
Вот набросал макрос. Открывать для редактирования колонтитул открывает и закрывает.
А вот с заменой у меня что-то не так. Методы выполняет, а самой замены не выполняет.
.Content.Find.Execute тоже замены не делает. Сможет кто помочь?
Заранее благодарен.
 
Что самое интересное, что .Content.Find.Execute в тексте странице всё нормально заменяет.
 
Когда-то делал такое и для колонтитулов в том числе. Что-то вроде такого должно быть:
Код
WD.Windows(1).ActivePane.View.SeekView = 9 ' второй верхний колонтитул
For lc = 1 To UBound(aToReplace, 1)
       FindText = "что ищем"
       ReplaceText = "на что заменяем"
       wdRange.Find.ClearFormatting
    wdRange.Find.Replacement.ClearFormatting
    With wdRange.Find
        .Text = FindText
        .Replacement.Text = ReplaceText
        .Forward = True
        .Wrap = 1 'wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    wdRange.Find.Execute Replace:=2 'wdReplaceAll
    For l_tmp_wait = 1 To 100: DoEvents: Next
Next lc
WD.Windows(1).ActivePane.View.SeekView = 0 ' вернуться в тело документа

и все работало без проблем. Возвращаться в тело документа обязательно, иначе изменения пропадут.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Тема закрыта. Разобрался сам. Кому нужно, см. в файлах.
Изменено: Esheron - 19.11.2017 15:45:54
 
В общем-то выше я такой код и привел :) Рекомендую остальные параметры поиска/замены не оставлять без участия и указывать обязательно, т.к. они могут сохраниться от последнего поиска и сыграть злую шутку.
Изменено: The_Prist - 19.11.2017 16:10:50
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Доброго времени суток, уважаемые форумчане!
Подниму старую тему. А как быть, когда в колонтитуле таблица. Макрос не может, к сожалению, изменить в ней текст. Пример прилагаю.

Может кто-нибудь помочь?
Страницы: 1
Наверх