Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
RAD XE3+

Изменение текста в колонтитулах в таблице WORD

23.07.2019, 17:42. Показов 4934. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем знаю тема баян, но рыл форум и ничего не помогает ни макросы ни код на delphi. Есть колонтитул в нем таблица, в этой таблице значение которое нужно изменить. В основном документе все хорошо текст меняется. Даже если сделать активным окно колонтитулов, замена текста не происходить. Пытался использовать макросы для замены автофигур и надписей все равно не помогает. В общем надеюсь на вашу помощь, потому что сам уж точно не разберусь, если кому нужно могу дать ссылку на пример файла с колонтитулом.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2019, 17:42
Ответы с готовыми решениями:

Изменение направления текста в таблице Word
Подскажите как изменить напрвление текста в ячейке таблицы в Word при помощи vba

Замена текста в колонтитулах Word-a
Приветствую, Друзья! Есть код который находит и заменяет текст в вордовском документе. Но он не заменяет текст в колонтитулах. Как это...

Автозамена текста в колонтитулах в Word
Нужен макрос, который производит автозамену текста в колонтитулах. Использую данный макрос в прикрепленном мной файле: Sub test() ...

19
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
23.07.2019, 18:23
Вы лучше код покажите, как вы ищете в колонтитулах.
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
23.07.2019, 18:39  [ТС]
...

Добавлено через 4 минуты
Цитата Сообщение от Пытливый Посмотреть сообщение
Вы лучше код покажите, как вы ищете в колонтитулах.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  Shape, Find: olevariant;
  i: integer;
begin
  for i:=1 to WordApp1.ActiveDocument.Shapes.Count do begin {поиск и замена в надписях}
    Shape:=WordApp1.ActiveDocument.Shapes.Item(i);
    if Shape.Type= 17 then begin
      Find:=Shape.TextFrame.TextRange.Find;
        Find.ClearFormatting;
        Find.Replacement.ClearFormatting;
        Find.Text:='что ищем';
        Find.Replacement.Text:='на что заменяем';
        Find.Forward:=True;
        Find.Wrap:=wdFindContinue;
        Find.Format:=False;
        Find.MatchCase:=False;
        Find.MatchWholeWord:=False;
        Find.MatchWildcards:=False;
        Find.MatchAllWordForms:=False;
        Find.Execute(Replace:=wdReplaceAll);
    end;
  end;
end;
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
24.07.2019, 10:26
я провел эксперимент, и ответственно заявляю - ворду по барабану, где находится искомый текст. хоть в таблице, хоть в колонтитуле, хоть в надписи.
далее: неясна конечная цель задача, которую нужно выполнить. Предположу, что документ - это некий шаблон (к примеру, справка), который нужно заполнить текстом. в таком случае это делается просто:
в шаблоне в местах, куда нужно поставить текст, прописывается уникальная подстановочная строка, которая потом программно ищется и меняется на нужный текст.


ну и сам макрос
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub Ìàêðîñ3()
'
' Ìàêðîñ3 Ìàêðîñ
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "#SURNAME"
        .Replacement.Text = "Èâàíîâ"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "#NAME"
        .Replacement.Text = "Âàñèëèé"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "#PATR"
        .Replacement.Text = "Ïåòðîâè÷"
        .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
все, что начинается на .Match, наверное можно выкинуть, т.к. это значения по умолчанию
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
24.07.2019, 11:10  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
alse
* * End With
* * Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Вы ошибаетесь, привожу пример файла на котором это не сработало.
Нужно заменить №16 и 12.038. Ваш макрос не решает этой проблемы.
Версия Word 2016
Вложения
Тип файла: docx проверка.docx (50.9 Кб, 4 просмотров)
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
24.07.2019, 11:34
Цитата Сообщение от Kompish Посмотреть сообщение
Ваш макрос не решает этой проблемы.
это не мой макрос. Это записанный Вордом макрос. и в приведенном тобой документе все прекрасно меняет. Две замены
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Макрос3()
'
' 
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "№16"
        .Replacement.Text = "Hello"
        .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 минуты
все также неясна конечная цель

Добавлено через 25 секунд
Ворд 2010
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
24.07.2019, 11:49  [ТС]
В таблицах тоже изменился текст, где написано документ 16?можно скрин?Может дело в версии ворда? Потому что когда я пытался заменить текст с помощью поиска в ворде он не за менял его, но если ставил область поиска 'надпись в колонтитула', то он менял.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
24.07.2019, 11:59
Цитата Сообщение от Kompish Посмотреть сообщение
если ставил область поиска 'надпись в колонтитула'
возможно, как раз дело в версии, т.к. указанной опции в 2010 нет. но тем не менее, ищет по всему документу, невзирая на место расположения текста
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
25.07.2019, 18:03  [ТС]
Применил макрос, ничего не вышло.
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
25.07.2019, 22:03  [ТС]
Ребят тема все также актуальна, есть колонтитул в который добавлена надпись, именно в надписях меняться ничего не хочет, проверьте сами, найдется герой решивший эту проблему?
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
26.07.2019, 04:57
Цитата Сообщение от Kompish Посмотреть сообщение
есть колонтитул в который добавлена надпись
Именно надпись или таки таблица? В таблице все прекрасно меняется при использовании механизма закладок...

Добавлено через 7 минут
Да, собственно, и в надписи - тоже... Офис, если что, как раз 2016
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var W, WD: OLEVariant;
    f, nf: String;
begin
  f := 'C:\TMP\doc1.docx';
  nf := 'c:\TMP\new_doc1.docx';
  try
    W := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
  WD := W.Documents.Open(f);
  WD.Bookmarks.Item('z1').Range.Text := Edit1.Text;
  WD.Bookmarks.Item('z2').Range.Text := DateToStr(DateTimePicker1.Date);
  WD.Bookmarks.Item('z3').Range.Text := Edit2.Text;
  W.DisplayAlerts := False;
  WD.SaveAs(nf);
  W.DisplayAlerts := True;
  WD.Close;
  W.Quit;
end;
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
26.07.2019, 09:12
Цитата Сообщение от Kompish Посмотреть сообщение
Применил макрос, ничего не вышло.
опять макрос! открой Ворд и средствами ворда (Ctrl + H) попробуй заменить текст во всем документе. если работает, значит ошибка в коде (о чем косвенно свидетельствует эксперимент D1973)
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 12:32  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Именно надпись или таки таблица? В таблице все прекрасно меняется при использовании механизма закладок...

Добавлено через 7 минут
Да, собственно, и в надписи - тоже... Офис, если что, как раз 2016
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var W, WD: OLEVariant;
    f, nf: String;
begin
  f := 'C:\TMP\doc1.docx';
  nf := 'c:\TMP\new_doc1.docx';
  try
    W := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
  WD := W.Documents.Open(f);
  WD.Bookmarks.Item('z1').Range.Text := Edit1.Text;
  WD.Bookmarks.Item('z2').Range.Text := DateToStr(DateTimePicker1.Date);
  WD.Bookmarks.Item('z3').Range.Text := Edit2.Text;
  W.DisplayAlerts := False;
  WD.SaveAs(nf);
  W.DisplayAlerts := True;
  WD.Close;
  W.Quit;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.Button1Click(Sender: TObject);
var Word: OLEVariant;
     const wdReplaceAll = 2;
begin
Word:=CreateOleObject('Word.Application');
Word.Documents.Open('C:\abc\docl.docx');
Word.Visible := True;
Word.selection.find.Text :='№16';
Word.selection.find.replacement.Text := '№4327';
Word.Selection.find.execute(Replace := wdReplaceAll);
end;
Создал новый документ, повторил ничего не вышло
В основном документе надпись изменилась, а надпись которая лежит в колонтитуле -нет.
Да, с помощью CTRL+H, все заменятся, но с макросами и кодом это не работает.
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 12:37  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
опять макрос! открой Ворд и средствами ворда (Ctrl + H) попробуй заменить текст во всем документе. если работает, значит ошибка в коде (о чем косвенно свидетельствует эксперимент D1973)
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.Button1Click(Sender: TObject);
var Word: OLEVariant;
     const wdReplaceAll = 2;
begin
Word:=CreateOleObject('Word.Application');
Word.Documents.Open('C:\abc\docl.docx');
Word.Visible := True;
Word.selection.find.Text :='№16';
Word.selection.find.replacement.Text := '№4327';
Word.Selection.find.execute(Replace := wdReplaceAll);
end;
Попробуйте пожалуйста применить данный код у себя, если выйдет то скорее проблема с вордом.
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
27.07.2019, 14:55
Цитата Сообщение от Kompish Посмотреть сообщение
Создал новый документ, повторил ничего не вышло
Зачем было цитировать мой пост, если Вы не повторили, а сделали по своему!
Я еще раз повторюсь: делайте при помощи закладок - это работает начиная с Word 6 и до сих пор... Ну а если нет - ну дело-то хозяйское...
1
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 16:25  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.replaceNumSchool();
begin
Word.selection.find.Text :='№16';
Word.selection.find.replacement.Text := Edit1.Text;
Word.Selection.find.execute(Replace := wdReplaceAll);
Word.selection.Bookmarks.Item('z1').Range.Text := Edit1.Text;
Word.ActiveDocument.ActiveWindow.View.SeekView := wdSeekCurrentPageHeader;
Word.selection.Bookmarks.Item('z2').Range.Text := Edit1.Text;
Word.selection.Bookmarks.Item('z3').Range.Text := Edit1.Text;
Word.selection.start := 0;
Word.selection.end := 0;
end;
Сделал как вы сказали, но опять же закладки не видны, пишет что не существует запрашиваемый номер семейства.
Причем в основном документе все заменилось, с колонтитулом также не найдено, но я сделал его активным и теперь закладку находит, но в надписи которая находится в колонтитуле не видна. Так же решил поставить закладку в надпись в основном документе, все также не работает. Нужно как то сделать надпись активной
0
Модератор
 Аватар для D1973
9905 / 6442 / 2455
Регистрация: 21.01.2014
Сообщений: 27,346
Записей в блоге: 3
27.07.2019, 17:46
Цитата Сообщение от Kompish Посмотреть сообщение
закладки не видны
А Вы их реально в документе создали??? Прежде, чем к ним кодом обращаться?
1
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 17:53  [ТС]
Да создал, говорю же те что в основном документе изменились, в колонтитулах и надписях не находит, пока они не активны.

Добавлено через 3 минуты
Вы пробовали добавлять надпись в колонтитул? и от туда менять?
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 20:33  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
возможно, как раз дело в версии, т.к. указанной опции в 2010 нет. но тем не менее, ищет по всему документу, невзирая на место расположения текста
И да вот тот фрагмент где осуществляется выбор поиска, надпись в колонтитуле, вот где мне нужно осуществить поиск
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 23:50  [ТС]
Всем большое спасибо, разобрался. Отдельно спасибо за идею D1973, нужно было слегка изменить код.
Действительно нужно было поставить закладки. Код для замены ниже.Тему можно закрыть.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.replaceNumSchool();
var
 BookmarkName, Doc, R: OleVariant;
begin
Doc := Word.ActiveDocument;
 BookmarkName := 'z2';
  if Doc.Bookmarks.Exists(BookmarkName) then
   begin
     R := Doc.Bookmarks.Item(BookmarkName).Range;
     R.InsertAfter(Edit1.Text);
  end;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2019, 23:50
Помогаю со студенческими работами здесь

VBA Word изменение текстовых полей в шаблоне (колонтитулах)
Уважаемые профессионалы, нужна ваша помощь. Перечитал соседние ветки, перепробовал множество вариантов, но задачу решить не смог. ...

Несанкционированное изменение размера текста в таблице Word 2016
Уважаемые специалисты! Помогите решить проблему в Word 2016: Текст в таблице автоматически уменьшается, несмотря на установки стилей....

Программный отступ в колонтитулах Word
Здравствуйте. Подскажите пожалуйста, как реализовать отступ текста в колонтитуле Dim objWord As Object Dim wbDoc As New Document ...

Word: поиск текста в таблице
Можно ли как-то организовать поиск текста в таблице? Или для этого достаточно обычного поиска текста?

Нужно проставить нумерацию в колонтитулах в Word
1)Нужно проставить нумерацию в колонтитулах в Ворд. Уже пробовала разные способы, но нумерация появляется только на первой странице (а там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru