Автор Тема: Использование стилей в word vba  (Прочитано 102 раз)

Оффлайн Посетитель 25.04.2022

  • Посетитель форума
  • Сообщений: 1
Использование стилей в word vba
« : 25 Апрель 2022, 00:52 »
Есть задание - написать код, при котором пользователю дается возможность выбрать абзац в тексте и подобрать для него стиль среди 15 встроенных.
Некоторые стили, например, "Строгий", или "Слабое выделение", не применяются к параграфу, пишется "Не удалось применить". При этом если я меняю ActiveDocument.Paragraphs(a).Style на Selection.Style, то все становится нормальным.
В чем может быть проблема?

Макрос
Sub номер4г()

    Dim s As String
s = "Название объекта" + vbCrLf + "Обычный" + vbCrLf + "Без интервала" + vbCrLf + "Заголовок 1" + vbCrLf + "Подзаголовок" + vbCrLf + "Слабое выделение" + vbCrLf + "Выделение" + vbCrLf + "Сильное выделение" + vbCrLf + "Строгий" + vbCrLf + "Цитата 2" + vbCrLf + "Выделенная цитата" + vbCrLf + "Слабая ссылка" + vbCrLf + "Сильная ссылка" + vbCrLf + "Название книги" + vbCrLf + "Абзац списка"
b = InputBox("Введите количество параграфов, к которым вы хотите применить стиль")
For i = 1 To b
a = InputBox("Введите номер абзаца, к которому вы хотите применить стиль")
с = InputBox("Введите номер названия стиля" & s)
If с = 1 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Название объекта")
If с = 2 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Обычный")
If с = 3 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Без интервала")
If с = 4 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Заголовок 1")
If с = 5 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Подзаголовок")
If с = 6 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Слабое выделение")
If с = 7 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Выделение")
If с = 8 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Сильное выделение")
If с = 9 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Строгий")
If с = 10 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Цитата 2")
If с = 11 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Выделенная цитата")
If с = 12 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Слабая ссылка")
If с = 13 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Сильная ссылка")
If с = 14 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Название книги")
If с = 15 Then ActiveDocument.Paragraphs(a).style = ActiveDocument.Styles("Абзац списка")


Next

End Sub



Оффлайн Администратор

  • Administrator
  • Сообщений: 2017
Re: Использование стилей в word vba
« Ответ #1 : 26 Апрель 2022, 07:23 »
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Перед тем, как использовать команду Selection.Style, вы выделяете абзац?
Если абзац не выделен, то при использовании Selection.Style ничего визуально не происходит, поэтому не понятно, как у вас всё работает правильно в этом случае.

Вообще проблема в следующем. Стили в программе "Word" есть нескольких видов: которые применяются ко всему абзацу, которые применяются к символам и смешанные стили. Стиль "Строгий" - это стиль, который применяется к символам. Вы в коде пытаетесь применить символьный стиль ко всему абзацу и происходит ошибка. Поведение макроса в данном случае логично. Т.е. чтобы применить символьный стиль, нужно применять его не ко всему абзацу, а к указанному фрагменту.