Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 20 ]
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Тема: Как применить стиль текущего абзаца
Здравствуйте! Подскажите пожалуйста, как можно написать макрос для MS Word на VBA, который применяет стиль текущего абзаца (того, в котором находится курсор) ко всем Заголовкам второго уровня в документе?
Пыталась написать с помощью рекордера, назначить Основной стиль абзаца, но в таком случае применяется стандартный Times New Roman 12. Как получить стиль текущего абзаца?
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Вот код:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Dim prgName As String
prgName = Selection.Paragraphs(1).Style ' Определяем имя стиля текущего абзаца
ActiveDocument.Range.Find.ClearFormatting
ActiveDocument.Range.Replacement.ClearFormatting
With ActiveDocument.Range.Find
.Forward = True
.Wrap = wdFindContinue
.Format = True
.Style = "Заголовок 2" ' Найти абзац с именем стиля "Заголовок 2"
.Replacement.Style = prgName ' Заменить на стиль prgName
End With
ActiveDocument.Range.Find.Execute Replace:=wdReplaceAll ' Заменить все
End Sub
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Спасибо большое! Только немного не работает... Вот тут показывает ошибку
Post's attachmentsкод.jpg 35.32 Кб, файл не был скачан.
You don't have the permssions to download the attachments of this post.
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Замените на
ActiveDocument.Range.Find.Replacement.ClearFormatting
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Опять не работает. Только теперь вообще не выдает, где ошибка...
Пишет только
Line is not an executable statement
А какая line не пишет...
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Попробуйте так:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Dim prgName As String
prgName = Selection.Paragraphs(1).Style ' Определяем имя стиля текущего абзаца
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Заголовок 2")
Selection.Find.Replacement.Style = ActiveDocument.Styles(prgName)
With Selection.Find
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll ' Заменить все
End Sub
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Спасибо, что помогаете)
Теперь ошибку не выдает, все как будто работает, только ничего не делает) Заголовки как были так и остаются...
У меня вот этот работает, только здесь меняет Заголовок 2 не на текущий стиль, а на Times New Roman
Sub Макрос3()
'
' Макрос3 Макрос
' Макрос записан 14.12.2011 Admin
'
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Заголовок 2 знак")
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
"Основной шрифт абзаца")
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Так естественно будет менять на Times New Roman 12 т.к. это шрифт стиля "Основной шрифт абзаца".
В документе создайте другой стиль шрифта с нужными вам параметрами и в строке
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
"Основной шрифт абзаца")
Вставьте название созданного стиля
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Так я ж о чем и говорю! Мне нужно чтобы меняло не на конкретный созданный стиль, а на стиль любого активного абзаца. Это я просто показала пример макроса, который у меня хоть как-то работает. Я понимаю, что "Основной стиль абзаца" ни на что другое менять не будет. Просто думала, может можно этот макрос как-то изменить, чтобы был стиль текущего. Метод Copy.Format может какой-то?
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Чет я не понял, ведь надо искать уровень, а не стиль. Вместо:
aap77 пишет:.Style = "Заголовок 2" ' Найти абзац с именем стиля "Заголовок 2"
Надо:
.ParagraphFormat.OutlineLevel = wdOutlineLevel2
Макросы под заказ и готовый пакет - mtdmacro.ru
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Вождь пишет:ведь надо искать уровень, а не стиль
У меня в задании написано, что нужно применить форматирование текущего абзаца к определенным текстовым элементам документа - названиям разделов 2 уровня.
В моем макросе оно находит эти Заголовки, только меняет не на то, что нужно
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Apple-girl пишет:...У меня в задании ....названиям разделов 2 уровня...
И я об этом. Во всех макросах ветки все почему-то ищут стили, а по заданию надо уровень.
Apple-girl, попробуйте в вашем макросе вместо:
Selection.Find.Style = ActiveDocument.Styles("Заголовок 2 знак")
Selection.Find.ParagraphFormat.OutlineLevel = wdOutlineLevel2
Макросы под заказ и готовый пакет - mtdmacro.ru
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Поменяла. Ничего не изменилось. Вернее, так вообще не находит Заголовки. Тут же дело не в них.
Меня больше интересует, как узнать стиль текущего абзаца, НА КОТОРЫЙ нужно менять.
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
- За сообщение: 1
Re: Как применить стиль текущего абзаца
Apple-girl пишет:...стиль текущего абзаца...
Стиль первого из выбранных абзацкв: Selection.Paragraphs.First.Style
Э-хе-хе. Пришлось написать самому
Sub Макрос_Alex()
' присвоить стиль первого из выбранных абзацев всем заголовкам 2-го уровня
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = Word.wdFindContinue
.Format = True
.ParagraphFormat.OutlineLevel = Word.wdOutlineLevel2
.Replacement.Style = Selection.Paragraphs.First.Style
End With
Selection.MoveStart Unit:=Word.wdStory, Count:=-1
Selection.Find.Execute Replace:=Word.wdReplaceAll
End Sub
Макросы под заказ и готовый пакет - mtdmacro.ru
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Вождь пишет:Пришлось написать самому
Я, конечно, извиняюсь, уже наверное заколебала тут всех, но Ваш макрос тоже не делает того, что мне надо. Он выделяет текст до того места, где стоит курсор, и всё... А у Вас работает или не проверяли?
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
Re: Как применить стиль текущего абзаца
Проверял конечно. Мой макрос делает точно то, что сказано в вашем первом сообщении ветки. Да, опечатался, вместо MoveStart лучше Move. Но это не мешает работоспособности.
Макросы под заказ и готовый пакет - mtdmacro.ru
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Как применить стиль текущего абзаца
Ну, товарищи, можно вообще радикально макрос сделать используя ко конструкцию If Then End If и With End With:
Dim rng As Range
Dim prg As Paragraph
Set rng = ActiveDocument.Range
For Each prg in rng.Paragraphs ' Перебераем все абзацы
If prg.ParagraphFormat.OutlineLevel = Word.wdOutlineLevel2 and InStr(prg.Style, "Заголовок") > 0 Then
prg.Style = Selection.Paragraphs.First.Style
End If
Next prg
По условию если Уровень абзаца = 2 и в названии абзаца присутствует заголовок, то стиль абзаца = стилю первого абзаца выделения (стиль абзаца в положении курсора)
- Apple-girl
- рядовой
- Неактивен
- Зарегистрирован: 25.12.2011
- Сообщений: 9
Re: Как применить стиль текущего абзаца
Вождь пишет:Проверял конечно. Мой макрос делает точно то, что сказано в вашем первом сообщении ветки
У меня он совершенно ничего не делает...
aap77, последний вариант выдает ошибку и не работает...
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Как применить стиль текущего абзаца
Apple-girl пишет:последний вариант выдает ошибку и не работает...
На какой строке дает ошибку?
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
Re: Как применить стиль текущего абзаца
Apple-girl пишет:...ничего не делает...
А что должен? Давайте разберемся. Что в задании вы назвали "...Заголовкам второго уровня..."? Дополните пожалуйста: создала новый документ, выбрала первый абзац,........., в результате получила заголовок второго уровня. В моем понимании - это абзац, стиль которого имеет параметр "Уровень" равный 2.
Макросы под заказ и готовый пакет - mtdmacro.ru
Сообщений [ 20 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как применить стиль текущего абзаца
При работе с программой Microsoft Word у вас возникли проблемы? Если вам нужна помощь, неважно, опытный вы пользователь или новичок, вы всегда можете обратиться на сайт Ворд Эксперт. Наш сайт о Microsoft Office Word даст ответ про: как объединить ячейки в вордовской таблице.
Структура сайта очень удобна для навигации. Так, в основном разделе размещена вся базовая информация о приложении Microsoft Word, приведен большой список специальной литературы. Наш сайт о Microsoft Office Word даст ответ про: не открывает word 2007 выходит отчет об ошибке.
В разделе есть и ответы с пошаговым описанием – как решить проблему совместимости разных версий, как оформить текст или сделать его форматирование, как создаются шаблоны, поля, как работать с таблицами и картинками, как пишутся макросы, и еще многое другое, не менее важное. На портале о Microsoft Office Word вы узнаете про: как в word вставлять текст.
Если у вас нет достаточно опыта в работе с Word, или же просто не хватает времени, а работу сделать нужно – вам окажут квалифицированную помощь в разделе заказов, где вы можете оставить свою заявку. На портале о Microsoft Office Word вы узнаете про: как в ворд сделать одинаковый пробел для всех строк.
Вам, или подскажут, как правильнее и быстрее выполнить работу, или сделают это за вас – оставляете свой заказ, указывая ваши пожелания, и получаете готовую, качественно выполненную работу (заказ может быть на любую работу, связанную с Word). Наш сайт о Microsoft Office Word даст ответ про: ворд перенести в html.
Ну, и еще, вы можете общаться с другими пользователями в разделе «общение» - задавать свои вопросы или же оставлять свои пожелания по работе сайта, да и просто – поболтать. Наш сайт о Microsoft Office Word даст ответ про: word поворот листа вместе с текстом.