Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 9 ]
- Зарегистрирован: 10.01.2010
- Сообщений: 63
Тема: Как найти все вхождения слова с заданным форматированием
Как найти все вхождения слова с заданным форматированием, но при этом форматирование нужно получить, выделив это слово.
Например, выделим "бык", а затем ищем всех оставшихся (в данном случае полужирных и курсивных) быков, а просто полужирных или просто курсивных не трогаем.
В двух словах: как получить информацию о форматировании выделенного слова?

- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Как найти все вхождения слова с заданным форматированием
Понятие "форматирование" слишком общо и включает в себя форматирование шрифта, абзаца, нумерацию и т.д.
Если интересует только шрифт, то можно попробовать так:
With ActiveDocument.Range.Find
.Text = Selection.Text 'выделенное слово
.Font = Selection.Font 'Задаём шрифт. Если не получится, тогда нужно будет задавать отдельные элементы шрифта
While .Execute
'Что делать, если слово найдено
Wend
End With
Код c коленки, не проверял, но идея такова.
Лучше день потерять — потом за пять минут долететь!
- Зарегистрирован: 10.01.2010
- Сообщений: 63
Re: Как найти все вхождения слова с заданным форматированием
viter.alex пишет: .Font = Selection.Font
К сожалению, не работает. Основная проблема была именно считать формат: какое начертание, какой цвет, если есть... В справке по Word VBA свойство .Font по идее возвращает форматирование выделения (Returns or sets a Font object that represents the character formatting of the specified object), но
выдает ошибку.
Меня в основном интересует полужирность и курсив, поэтому придумал, как паллиатив, проверять исходное вхождение на эти 2 параметра.
With Selection.Font ' проверяем форматирование выделенной пометы
If .Italic = True Then bItalic = True Else bItalic = False
If .Bold = True Then bBold = True Else bBold = False
End With
А затем уже использовать эти переменные при поиске.

- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Как найти все вхождения слова с заданным форматированием
и будет давать ошибку, т.к. нет преобразования из Font в строку.
Да, действительно с присвоением шрифта не работает. Вообще ничего не находит и ошибки не даёт. Тогда, как я уже и писал, нужно присваивать отдельные свойства шрифта.
В переменные записывать значения отдельных свойств шрифта нецелесообразно, если переменные больше нигде не используются:
With ActiveDocument.Range.Find
.Text = Selection.Text 'выделенное слово
.Font.Bold = Selection.Font.Bold
.Font.Italic = Selection.Font.Italic
.Font.Color = Selection.Font.Color
While .Execute
'Что делать, если слово найдено
Wend
End With
А если всё-таки записывать, то гораздо понятнее будет такая запись:
With Selection.Font ' проверяем форматирование выделенной пометы
bItalic = .Italic
bBold = .Bold
End With
Лучше день потерять — потом за пять минут долететь!
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Как найти все вхождения слова с заданным форматированием
У меня на работе есть что-то подобное.. Во всяком случае - полужирность, курсив и подчеркнутость распознается.. И еще распознается цвет шрифта.. Если еще будет нужно, в понедельник вечером могу скинуть..
- Зарегистрирован: 10.01.2010
- Сообщений: 63
Re: Как найти все вхождения слова с заданным форматированием
viter.alex пишет:В переменные записывать значения отдельных свойств шрифта нецелесообразно
Да, спасибо, это абсолютно решает вопрос! Подправлю.
andrkar пишет:Если еще будет нужно, в понедельник вечером могу скинуть
Буду признателен, если поделитесь.
Отредактировано Денис (13.03.2010 23:00:46)
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Как найти все вхождения слова с заданным форматированием
Sub test()
With Selection.Font
ИмяШрифта = .Name
MsgBox ИмяШрифта
РазмерШрифта = .Size
MsgBox РазмерШрифта
If .Bold = True And .Italic = True Then Шрифт = "полужирный курсив" Else: Шрифт = "Неизвестно"
If Шрифт = "Неизвестно" And .Bold = True And .Italic = False Then Шрифт = "Полужирный"
If Шрифт = "Неизвестно" And .Bold = False And .Italic = True Then Шрифт = "Курсив"
If Шрифт = "Неизвестно" And .Bold = False And .Italic = False Then Шрифт = "Обычный"
MsgBox Шрифт
ЦШ = .Color
Select Case ЦШ
Case Is = wdColorAutomatic
ЦветШрифта = "Авто"
Case Is = wdColorBlack
ЦветШрифта = "Черный"
Case Is = wdColorBrown
ЦветШрифта = "Коричневый"
Case Is = wdColorOliveGreen
ЦветШрифта = "Оливковый"
Case Is = wdColorDarkGreen
ЦветШрифта = "Темно-зеленый"
Case Is = wdColorDarkTeal
ЦветШрифта = "Темно-сизый"
Case Is = wdColorDarkBlue
ЦветШрифта = "Темно-синий"
Case Is = wdColorIndigo
ЦветШрифта = "Индиго"
Case Is = wdColorGray80
ЦветШрифта = "Серый 80%"
Case Is = wdColorDarkRed
ЦветШрифта = "Темно-красный"
Case Is = wdColorOrange
ЦветШрифта = "Оранжевый"
Case Is = wdColorDarkYellow
ЦветШрифта = "Коричнево-зеленый"
Case Is = wdColorGreen
ЦветШрифта = "Зеленый"
Case Is = wdColorTeal
ЦветШрифта = "Сине-зеленый"
Case Is = wdColorBlue
ЦветШрифта = "Синий"
Case Is = wdColorBlueGray
ЦветШрифта = "Сизый"
Case Is = wdColorGray50
ЦветШрифта = "Серый 50%"
Case Is = wdColorRed
ЦветШрифта = "Красный"
Case Is = wdColorLightOrange
ЦветШрифта = "Светло-оранжевый"
Case Is = wdColorLime
ЦветШрифта = "Травяной"
Case Is = wdColorSeaGreen
ЦветШрифта = "Изумрудный"
Case Is = wdColorAqua
ЦветШрифта = "Темно-бирюзовый"
Case Is = wdColorLightBlue
ЦветШрифта = "Темно-голубой"
Case Is = wdColorViolet
ЦветШрифта = "Фиолетовый"
Case Is = wdColorGray40
ЦветШрифта = "Серый 40%"
Case Is = wdColorPink
ЦветШрифта = "Лиловый"
Case Is = wdColorGold
ЦветШрифта = "Золотисный"
Case Is = wdColorYellow
ЦветШрифта = "Желтый"
Case Is = wdColorBrightGreen
ЦветШрифта = "Ярко-зеленый"
Case Is = wdColorTurquoise
ЦветШрифта = "Бирюзовый"
Case Is = wdColorSkyBlue
ЦветШрифта = "Голубой"
Case Is = wdColorPlum
ЦветШрифта = "Вишневый"
Case Is = wdColorGray25
ЦветШрифта = "Серый 25%"
Case Is = wdColorRose
ЦветШрифта = "Розовый"
Case Is = wdColorTan
ЦветШрифта = "Светло-коричневый"
Case Is = wdColorLightYellow
ЦветШрифта = "Светло-желтый"
Case Is = wdColorLightGreen
ЦветШрифта = "Бледно-зеленый"
Case Is = wdColorLightTurquoise
ЦветШрифта = "Светло-бирюзовый"
Case Is = wdColorPaleBlue
ЦветШрифта = "Бледно-голубой"
Case Is = wdColorLavender
ЦветШрифта = "Сиреневый"
Case Is = wdColorWhite
ЦветШрифта = "Белый"
End Select
MsgBox ЦветШрифта
End With
End Sub
в данном процедуре у выделенного фрагмента определяется - Шрифт, размер шрифта, начертание шрифта, цвет шрифта.. Вроде примерно то, что вам нужно было? Думаю, не составить труда поменять что-то для своих нужд???

- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Как найти все вхождения слова с заданным форматированием
Несколько замечаний. Всё сделано правильно, за исключением того, что ни одна переменная не объявлена, переменные имеют кириллические имена и записей типа:
Это масло масляное. Достаточно написать:
или
Лучше день потерять — потом за пять минут долететь!
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Как найти все вхождения слова с заданным форматированием
согласен.. Просто писалось давно, когда только начинал.. В настройках еще не стоял флаг обязательного объявления переменных
Да и кириллицей уже не присваиваю давно:) Ну и по приведенным конструкциям - обязательно будем учитывать в дальнейшем.. Благо, еще много чего предстоит написать в макросах.. 
Сообщений [ 9 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как найти все вхождения слова с заданным форматированием
Для всех, кто желает совершенствоваться, расти и не любит терять времени понапрасну, предлагаем замечательную шпаргалку по Ворду – форум Ворд Эксперт. На портале о Microsoft Office Word вы узнаете про: как в ворд сделать нумерацию страниц с 4 страницы.
Что приятно, это русский форум, очень теплый, там вы не найдете заумных слов и жутких сленговых терминов, в которых без Билла Гейтса не разберешься. Наш сайт о Microsoft Office Word даст ответ про: как активировать ключ указанный на ноутбуке.
Все просто и понятно.
Заходя в дом - на форум, вы тут же оказываетесь в «прихожей» - разделе, где даются ответы на основные вопросы, как по самому Ворду, так и по устройству форума и сайта. На портале о Microsoft Office Word вы узнаете про: normal.dotm.
Там же вам предложат почитать что-нибудь интересное (про Ворд, конечно, за этим вы и пришли).
А в «гостиной» вы сможете обсудить программу, вашу версию, ее настройки, особенности работы, форматирование и многое другое. Наш сайт о Microsoft Office Word даст ответ про: изменить дату изменения в pdf файле.
Вас научат оптимизировать эксплуатацию Microsoft Word с помощью макросов. Это совсем не сложно.
В «столовой» форума подаются готовые блюда – оригинальные решения той либо иной проблемы, макросы и многое другое. Наш сайт о Microsoft Office Word даст ответ про: быстрая замена прописных и строчных букв в excel.
Если хотите заказать «экзотическое блюдо», добро пожаловать «на кухню» - раздел «заявки на разработку». На портале о Microsoft Office Word вы узнаете про: немогу ничего написать в ворде.
Оставьте в нем описание своей проблемы, и вам помогут.
Что такое «курилка» объяснять, наверно, никому не надо. На портале о Microsoft Office Word вы узнаете про: ключи для офисса 2007.
Заходите и сами все увидите. А пожелания можно оставлять в соответствующем разделе.