Разбираем по кусочкам новый «ленточный» интерфейс Word 2007. Здесь нет и не будет советов о том, как его сделать похожим на Word 2003. Только усовершенствования уже существующего. Также приглашаю посетить мой блог, посвященный работе с макросами в Word.

Напоминаю, что все коды программ, приведенных в блоге, вы используете на свой страх и риск. Не забывайте создавать резервные копии.

суббота, 27 декабря 2008 г.

Получение данных из текстового поля

При работе с текстовыми документами мне часто приходится изменять междустрочный интервал. Постоянно открывать для этого соответствующее меню мне надоело. Поэтому я подумал:«А как сделать, чтобы интервал задавать числом? 2 — для двойного интервала, 1 — для одинарного, или просто конкретное значение?»
Во-первых, поместить на ленту поле editbox.
Вот так, например:

Код для вставки поля для редактирования   Копировать код без номеров строк
1 <editBox id="__SetLineSpacing"
2 onChange="Macroses.УстановитьМежстрочныйИнтервал"
3 supertip="Укажите число для междустрочного интервала"/>

Во-вторых, написать код макроса, который бы брал текст из поля и соответственно устанавливал междустрочный интервал. Довольно долгие поиски дали вот такой результат (с этого сайта):
1 Sub УстановитьМежстрочныйИнтервал(editbox As IRibbonControl, text As String)
2 Selection.ParagraphFormat.LineSpacing = LinesToPoints(Val(text))
3 End Sub

Как видно код очень даже не сложный, но очень сложно вообще откопать информацию, особенно на русском языке, по работе с новым интерфейсом. На MSDN при вводе в поле поиска фразы «ribbon vba» страница просто закрывалась. Прямо масонский заговор
Итак, весь секрет заключался в параметре text, который очень не очевиден, и просто объявляется.
Теперь задача в другом: как выставлять значение в этом поле в соответствии со строчным интервалом уже выделенного текста? И все это только средствами VBA.