Проблема:
Как известно, начиная с Office 2007, компания Microsoft стала использовать ленточный интерфейс меню. Конечно, ко всему можно привыкнуть, но как-то вот сильно напрягает то, что нельзя никак этот интерфейс менять. То есть ни добавить нужную кнопку - ни удалить лишнюю. Однако, уже в Microsoft Office 2010 возможность добавлять/удалять кнопки на ленту появилась, правда, по сравнению с Microsoft Office 2003 эта возможность сильно урезана.
Вот почему хочется поделиться опытом полноценной правки ленточной панели меню.
Решение:
В этом примере мы будем добавлять кнопку «Сканировать» на ленту Microsoft Office 2007. Почему именно такой выбор - да потому что начиная с Office 2007, компания Microsoft удалила из Word возможность сканировать прямо в документ, предписывая пользоваться специальным инструментом «Microsoft Office Document Scanning».
Однако мы, люди привыкшие к удобной функции прямо в интерфейсе MS Word 2003 «Вставка» -> «Рисунок» -> «Со сканера или камеры»
Так было в Office 2003
хотим вернуть такую удобную кнопку на панель инструментов.
Итак, начнем.
Если у нас установлен MS Office 2010, то первый и второй этапы можно пропустить, создав кнопку «Сканировать» непосредственно в интерфейсе MS Word 2010 и привязав ее к макросу, создаваемому на третьем этапе.
Этап первый. Отображение кнопки «Сканировать» на ленте Microsoft Word 2007.
-
Скачиваем бесплатный редактор xml тэгов, Ribbon XML Editor предназначенный специально для переработки меню MS Word 2007-2010.
Зеркало здесь:Поскольку в нашем примере мы будем использовать этот редактор лишь узконаправленно а «Ribbon XML Editor» на самом деле очень полезный, функциональный и главное - простой редактор, то для полного понимания его работы стоит почитать статьи его автора:
-
Домашняя страничка редактора «Ribbon XML Editor»
-
-
Распаковываем скачанный архив и запускаем редактор «Ribbon XML Editor»
-
Создаем на рабочем столе документ MS Word, открываем его, делаем какое-нибудь изменение и сохраняем. Это важно, иначе «Ribbon XML Editor» будет ругаться
«EZipReader: Не найдена сигнатура END_OF_CENTRAL_DIR_SIGNATURE»
Спойлер
-
Открываем этот документ MS Word при помощи «Ribbon XML Editor», прямо из интерфейса редактора:
Спойлер
-
Поскольку собственных меню в этом файле мы не создавали, то и окно редактора «Ribbon XML Editor» будет чистым:
Спойлер
-
Вставляем в редактор следующий код:
Код: Выделить всё
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab idMso="TabHome"> <group id="MyScanGroup" label="Сканирование"> <box id="__BoxPage1" > <button id="MyScanButton" label="Сканировать" size="large" showLabel="true" image="Scanner" onAction="InsertFromScanner" /> </box> </group> <group idMso="GroupStyles" visible="false"/> <group idMso="GroupInsertTables"/> <group idMso="GroupInsertSymbols"/> <group idMso="GroupInsertPages"/> <group idMso="GroupZoom"> </group> </tab> <tab id="TabStyles" label="Разное"> <group idMso="GroupStyles"/> </tab> </tabs> </ribbon> </customUI>
Здесь параметру «onAction» присваивается имя макроса «InsertFromScanner» из общей книги макросов, который мы будем создавать на третьем этапе.
-
Добавляем в проект картинку (которая будет иконкой на нашей кнопке) в формате png, bmp, tif, tiff, ico, emf, wmf и именем «Scanner»:
Спойлер
Картинку можно скачать предварительно из сети Internet. Приведу в пример пару png-изображений сканера:
Спойлер
-
Делаем запуск скомпилированного кода прямо из интерфейса «Ribbon XML Editor» (открываем созданный нами xml документ в MS Word):
Спойлер
-
Надо добавить, что указанный xml код не только добавляет кнопку «Сканировать» на вкладку «Главная» ленты MS Office Word, но и переносит редко используемую группу «Стили» на вкладку ленточного меню «Разное».
В итоге в нашем документе (но не во всех документах MS Word) получаем вкладку «Главная» без лишних кнопок стилей, но с нужной кнопкой «Сканирование»:Спойлер
-
Закрываем «Ribbon XML Editor» (а MS Word 2007 с нашим документом оставляем открытым)
Этап второй. Отображение кнопки «Сканировать» на ленте всех документов Microsoft Word 2007, а не только в том, который мы только что создали.
-
Сохраняем этот наш документ с кнопкой «Сканировать» как шаблон с поддержкой макросов (dotm):
Спойлер
-
Закрываем все экземпляры MS Word
-
Переименовываем только что сохраненный файл в «Normal.dotm»
-
Открываем папку своих шаблонов: %appdata%\Microsoft\Шаблоны
-
Переименовываем старый файл шаблонов «Normal.dotm» в «Normal1.dotm»
-
Копируем наш новый файл «Normal.dotm» в папку %appdata%\Microsoft\Шаблоны:
Спойлер
То есть на данном этапе мы заменили стандартный файл шаблонов MS Office Word на свой файл, с кнопкой «Сканировать», созданный на предыдущем этапе.
Этап третий. Создание в стандартном шаблоне MS Word подписанного макроса (то есть непосредственно исполняемого кода VBA) для вызова интерфейса сканирования
-
Создаем свою новую электронную подпись, для чего запускаем «Microsoft Office» -> «Средства Microsoft Office» -> «Цифровой сертификат для проектов VBA»:
Спойлер
-
Задаем произвольное имя, например «MyMacroces»:
Спойлер
-
Cоздаем сертификат:
Спойлер
-
Открываем Word 2007 (любой файл или новый документ)
-
Отображаем панель «Разработчик» (Кнопка«Office» -> «Параметры Word»:
Спойлер
-> Вкладка «Основное» -> ставим галочку «Показывать вкладку «разработчик» на ленте»:
Спойлер
-
Открываем редактор «Visual Basic»
Спойлер
-
В общей книге «Normal» (для того, чтобы код модуля был доступен из любого файлика MS Word) создаем новый модуль с произвольным именем, например «Module1»:
Спойлер
-
Копируем в него код вызова сканера:
Код: Выделить всё
Sub InsertFromScanner(ByVal Control As IRibbonControl) On Error Resume Next WordBasic.InsertImagerScan End Sub Sub InsertFromScanner1() On Error Resume Next WordBasic.InsertImagerScan End Sub
Здесь создается два макроса:
первый - в который при вызове передается параметр «(ByVal Control As IRibbonControl)» - это нужно для того, чтобы макрос вызывался кнопкой, которую мы создали на ленте (соответственно, имя макроса должно совпадать с тем именем, которое мы присвоили параметру «onAction» в xml шаблоне, созданном на первом этапе).второй - с вызовом без параметров- на всякий случай, если, например в MS Office 2010 захочется просто из интерфейса MS Word (вручную) создать новую кнопку на ленте с запуском макроса.
Спойлер
-
Подписываем наш модуль созданным сертификатом: «Tools» -> «Digital Signature»:
Спойлер
-> Раздел «Подпись» -> Кнопка «Выбрать»:
Спойлер
-> Выбираем только что созданный сертификат:
Спойлер
-> «ОК»:
Спойлер
-
Сохраняем шаблон «Normal» (Ctrl+s) и закрываем Visual Basic
В итоге имеем во всех документах MS Word 2007 текущего пользователя «причесанную» «Главную» вкладку ленты быстрого доступа с кнопкой «Сканировать», которая вызывает подписанный макрос из общей книги макросов :
Архив с готовым шаблоном «Normal.dotm» можно скачать здесь для MS Word 2007:
и здесь для MS Word 2010:
В статье использовались материалы: