Можно также оставить на кнопке текст с названием макроса, однако тогда этот текст стоит соответственно отредактировать. Стоит помнить, что при подведении курсора мыши к кнопке, вызывающей макрос, отображается всплывающая подсказка с названием макроса (берется название макроса после команды начала программы Sub), поэтому макросам неплохо давать осмысленные имена. Однако если макрос назван по-русски, то в нелокализованных версиях Word он не будет вызываться кнопкой, созданной в русской версии.
Всплывающие подсказки кнопок можно задать самостоятельно с помощью команды "CommandBars("Имя панели").Controls("Номер иконки на панели").TooltipText = "Текст подсказки"". К сожалению, через диалоговое окно настройки панелей и кнопок сделать это не удастся, поэтому для ввода этой команды придется использовать отдельный модуль или Окно отладки.
Вам может не понравиться весьма ограниченный выбор значков для кнопок, предлагаемый Word'ом. Этот набор, вызываемый из меню "Выбрать значок для кнопки" в режиме настройки панелей, действительно, маловат. Но никто не мешает с помощью других команд того же меню скопировать значок с любой другой кнопки на любой другой панели или создать его самому во встроенном редакторе изображений на кнопках. Кроме того, красивые значки можно извлечь из "недр" Office, — а он содержит в себе около двух тысяч разнообразных значков! Для этого достаточно ввести в Окне отладки команду
CommandBars("имя существующей панели инструментов").Controls.Add(Туре:=msoControlButton, ID:=797).Faceld = х
где
Если в качестве способа вызова макроса выбрана панель инструментов с кнопками, то после окончания работы над ней стоит повторить создание нового документа и вновь скопировать все компоненты программы в новый документ вместе с панелью. Такое преобразование позволит существенно сократить размер файла с программой, так как вследствие ошибки в Office при редактировании макросов файл с программой сильно увеличивается в размерах — до полутора-двух раз. Впрочем, в OfficeXP данная рекомендация уже неактуальна.
Не стоит забывать и об информативном руководстве для пользователя, особенно если программа будет распространяться через Интернет. Лучше всего такое руководство оформить в отдельном текстовом файле или, если оно имеет большой объем, в виде набора связанных html-документов.
• Настройки программы можно сохранять в системном реестре Windows. Для этого служит команда "SaveSetting", с помощью которой можно поместить в системный реестр строку или число. Она имеет формат "SaveSetting "Имя приложения", "Имя раздела", "Ключ", "Значение"". Имя приложения, имя раздела и ключ — указатели места, в котором сохраняется Значение. Получить значения из реестра можно командой "GetSetting" с синтаксисом "GetSetting "Имя приложения","Имя раздела", "Ключ", "То значение, которое следует вернуть, если такого ключа, как указанный в предыдущем параметре, в реестре нет"", а удалить — командой "DeleteSetting "Имя приложения","Имя раздела", "Ключ"". Например:
SaveSetting "Макросы", "Макрос1", "Имя папки", "C:\MyPapka" papka = GetSetting "Макросы", "Макрос1", "Имя папки", "C:\Docs"
• Записать список всех установленных в системе шрифтов в массив можно таким способом:
ReDim shrifti(FontNames.Count) As String
For r = 1 To FontNames.Count
shrifti(r) = FontNames(r)
Next r
WordBasic.SortArray shrifti
(В массив "shrifti" размером в количество шрифтов в системе помещается список имен всех установленных в системе шрифтов. Команда "WordBasic.SortArray" сортирует его по алфавиту.)
• Условие "If Selection. Type = wdSelectionIP Then…" выполнится, только если в документе не выделен фрагмент текста.
• Если вы решили хранить какую-нибудь информацию, нужную при работе программы, в отдельном файле, не стоит экспериментировать с командами чтения и открытия файла типа "open", "write" и др. Просто открывайте файл в Word как текстовый с помощью команды "Documents. Open…" и пишите в него обычными средствами записи текста: "Selection.Text = "Мой текст"".
• Посмотрите повнимательнее свойства, объекты и методы таких объектов, как "Application" и "System" (для этого достаточно набрать название объекта и поставить после него точку, — список возможных продолжений отобразится сам). Среди них можно найти немало весьма интересных и полезных, вроде средства задания и получения значений ширины и высоты окна Word, информации о языке данной версии Office, метод чтения данных из произвольного места реестра и многое другое.
• С помощью фрагмента кода
Set MyData = New DataObject
MyData.SetText "Мой текст"
MyData.PutlnClipboard
можно поместить текст в буфер обмена, не используя активный документ.