Другие языки программирования и технологии
Помогите с макросами в Word 2007
Редактирую текст, который в последствии станет методичкой. Нужно отредактировать все заголовки (перевести в верхний регистр, пронумеровать без использования стандартных средств ворда, добавить пустые строки перед и после и т. д.) , удалить лишние пробелы и символы табуляции и т. д. Сам написал несколько макросов. Может кто-то может чем-то помочь. Либо самоучителем по написанию макросов, либо готовыми макросами.
Большу часть из перечисленного можно сделать без макросов, работая со стилями и заменой.
Замена, кстати, позволяет менять шрифт, абзац и т. п.
Замену также можно записать мкрорекордером и отредактировать вручную. Например использовать замену ^p на ^p & N, где ^p знак абзаца, а N номер - это для номерации.
Я правда, не знаю, как завершить подобный макрос по достижении конца первоначально выделения.
С литературой на эту тему очень туго. Во всех учебниках рассмотрены тривиальные примеры, а объектная модель Word довольно запутана и нелогична.
Если это чем поможет - вот мой макрос
Sub zzMashkov() '' форматирование текста от Машкова
''(Home: http://lib.ru/~moshkow/ Mail: moshkow@systud.msk.su)
'шрифт и абзац
Selection.WholeStory
Selection.Font.Name = "Times New Roman"
With Selection.ParagraphFormat
.Alignment = wdAlignParagraphJustify
.FirstLineIndent = CentimetersToPoints(0.63)
End With
Selection.HomeKey Unit:=wdLine
'Если надо, сохранение 2-х абзицев подряд
With Selection.Find
.Text = "^p^p"
.Replacement.Text = "^p^p22222"
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
With Selection.Find
.Text = "^p "
.Replacement.Text = "^p^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
'убрать лишние абзацы в концах строк с сохранением стилей
With Selection.Find
.Text = "^p"
.Replacement.Text = "00000^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "00000^p00000^p"
.Replacement.Text = "^p00000"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "00000^p"
.Replacement.Text = " "
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "00000"
.Replacement.Text = ""
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
With Selection.Find
.Text = "--"
.Replacement.Text = "-"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "22222"
.Replacement.Text = "^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^p "
.Replacement.Text = "^p"
.Forward = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ^p"
.Replacement.Text = "^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^p^p^p"
.Replacement.Text = "^p^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " "
.Replacement.Text = " "
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Замена, кстати, позволяет менять шрифт, абзац и т. п.
Замену также можно записать мкрорекордером и отредактировать вручную. Например использовать замену ^p на ^p & N, где ^p знак абзаца, а N номер - это для номерации.
Я правда, не знаю, как завершить подобный макрос по достижении конца первоначально выделения.
С литературой на эту тему очень туго. Во всех учебниках рассмотрены тривиальные примеры, а объектная модель Word довольно запутана и нелогична.
Если это чем поможет - вот мой макрос
Sub zzMashkov() '' форматирование текста от Машкова
''(Home: http://lib.ru/~moshkow/ Mail: moshkow@systud.msk.su)
'шрифт и абзац
Selection.WholeStory
Selection.Font.Name = "Times New Roman"
With Selection.ParagraphFormat
.Alignment = wdAlignParagraphJustify
.FirstLineIndent = CentimetersToPoints(0.63)
End With
Selection.HomeKey Unit:=wdLine
'Если надо, сохранение 2-х абзицев подряд
With Selection.Find
.Text = "^p^p"
.Replacement.Text = "^p^p22222"
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
With Selection.Find
.Text = "^p "
.Replacement.Text = "^p^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
'убрать лишние абзацы в концах строк с сохранением стилей
With Selection.Find
.Text = "^p"
.Replacement.Text = "00000^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "00000^p00000^p"
.Replacement.Text = "^p00000"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "00000^p"
.Replacement.Text = " "
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "00000"
.Replacement.Text = ""
End With
Selection.Find.Execute Replace:=wdReplaceAll
'
With Selection.Find
.Text = "--"
.Replacement.Text = "-"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "22222"
.Replacement.Text = "^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^p "
.Replacement.Text = "^p"
.Forward = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " ^p"
.Replacement.Text = "^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "^p^p^p"
.Replacement.Text = "^p^p"
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = " "
.Replacement.Text = " "
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
а чем не нравяться стандартные заголовки? я ваще вапрос не понял - макросы ворд этого делать не смогут помоему, это ваще гемор какойто - надо целую программу составлять, ты хучь алгоритм сможешь сформулировать? , методичка на 20 листов обычно, ну макс 100, и в чем проблемма в заголовках чтоли.
Энтони Кри
Это не простая методичка. Она включает руководство к программе. На формате листа А5 у меня получилось 452 листа. Заголовки надо перевести в верхний регистр, для этого я сделал макрос, но надо по отдельности выделять каждый заголовок. Поэтому я и решил, что кто-то этим раньше занимался и спросил.
Андрей В
это можно сделать в vba, как не знаю, но можно точно, если время, которое уйдет на изучение литературы, составление программы будет меньше, чем время на правку заголовков вручную, то имеет смысл этим заняться. В общем по сути заголовки уже отмечены - они чем-то отличаются от остального текста, вот надо узнать чем, и пускай программа ищет эти слова в тексте и делает с ними то, что тебе надо. Как-то так в общем.
в твоем случае ручками быстрее
Похожие вопросы
- Как написать макрос для Word 2003 чтобы выполнял сортировку чисел в квадратных скобках?
- Подскажите, как правильно установить "Верстку текста книжкой" в Word 2007?
- Помоги запустить макрос в OpenOffice
- помогите с макросом
- КАК ПИСАТЬ КРАСИВЫМ ШРИФТОМ В Microsoft Office Word 2007
- Как в Word 2007 подготовить файл для печати так, чтобы формат А5 компактно распечатать на А4 листах?
- Excel. Макрос. Найти в Листе1 значение активной ячейки из Листа2.
- Вопрос по макросам MS Excel
- VB. Макросы в MS Exel.
- Необходимо создать макрос для excel