Excel. Трюки и эффекты — страница 17 из 36

При необходимости в состав настраиваемых панелей инструментов, которые находятся на вкладке Надстройки, можно добавлять пользовательские элементы управления (в частности, кнопки). Например, можно использовать следующий макрос (листинг 3.40).

Листинг 3.40. Добавление кнопки на панель инструментов

Sub AddCustomButton()

' Добавление кнопки на панель инструментов

With Application.Toolbars(1).ToolbarButtons.Add(button:=222)

.Name = «Кнопка»

.OnAction = «Макрос»

End With

End Sub

Кнопка, добавленная на стандартную панель инструментов в результате применения этого макроса, показана на рис. 3.10.

Рис. 3.10. Добавление пользовательской кнопки

Примеры создания панелей инструментов

В данном разделе мы рассмотрим несколько трюков, с помощью которых можно создавать пользовательские панели инструментов.

Чтобы быстро создать пользовательскую панель инструментов с одной кнопкой, можно воспользоваться следующим макросом (листинг 3.41).

Листинг 3.41. Панель с одной кнопкой

Sub CreateCustomControlBar()

' Создание панели инструментов

With Application.CommandBars.Add(Name:="Панель",

Temporary:=True)

' Создание и настройка кнопки

With .Controls.Add(Type:=msoControlButton)

.Style = msoButtonIconAndCaption

.FaceId = 66

.Caption = «Просто кнопка»

End With

' Покажем панель

.Visible = True

End With

End Sub

Результат выполнения данного макроса представлен на рис. 3.11.

Рис. 3.11. Пользовательская панель инструментов


Обратите внимание, что в данном случае кнопка отображается со значком и подписью одновременно.

Примечание

Кнопка General на панели инструментов присутствует по умолчанию, независимо от выполненного макроса. В данном случае нас интересует лишь кнопка Просто кнопка, созданная с помощью макроса.

Теперь познакомимся с макросом, использование которого позволяет создать пользовательскую панель инструментов с двумя кнопками. Код данного макроса выглядит следующим образом (листинг 3.42).

Листинг 3.42. Панель с двумя кнопками

Sub CreateCustomControlBar()

' Создание панели инструментов

With Application.CommandBars.Add(Name:="Панель",

Temporary:=True, _

Position:=msoBarLeft)

' Создание и настройка первой кнопки

With .Controls.Add(Type:=msoControlButton)

.Style = msoButtonWrapCaption

.Caption = «Просто кнопка»

End With

' Создание и настройка второй кнопки

With .Controls.Add(Type:=msoControlButton)

.Style = msoButtonIconAndWrapCaption

.Caption = «Кнопка»

.FaceId = 225

End With

' Покажем панель

.Visible = True

End With

End Sub

После запуска макроса на вкладке Надстройки появится пользовательская панель (рис. 3.12).

Рис. 3.12. Панель в левой части интерфейса


В данном случае кнопка General также присутствует по умолчанию, наш макрос на ее появление не влияет.

Формирование пользовательского меню

Возможности программы предусматривают создание и дальнейшее использование пользовательских меню, которые могут располагаться на вкладке Надстройки. Вот пример подобного макроса (листинг 3.43).

Листинг 3.43. Создание пользовательского меню (вариант 1)

Sub AddCustomMenu()

' Добавление меню

W i t h A p p l i c a t i o n . C o m m a n d B a r s ( 1 ) . C o n t r o l s . A d d

(Type:=msoControlPopup, _

Temporary:=True)

.Caption = «Архив»

With .Controls

' Добавление и настройка первого пункта

With .Add(Type:=msoControlButton)

.FaceId = 280

.Caption = «Просмотр»

.OnAction = «Макрос1»

End With

' Добавление вложенного меню

With .Add(Type:=msoControlPopup)

.Caption = «База данных»

With .Controls

' Добавление и настройка первого пункта _

вложенного меню

With .Add(Type:=msoControlButton)

.FaceId = 1643

.Caption = «Поставщики»

.OnAction = «Макрос2»

End With

' Добавление и настройка второго пункта _

вложенного меню

With .Add(Type:=msoControlButton)

.FaceId = 1000

.Caption = «Покупатели»

.OnAction = «Макрос3»

End With

End With

End With

End With

End With

End Sub

Очевидно, что данный макрос используется в комплексе с другими макросами (Макрос 1, Макрос2 и Макрос3), которые разрабатываются отдельно.

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

Если макросы Макрос 1, Макрос2 и Макрос3 отсутствуют, то при выборе пунктов Просмотр, Поставщики и Покупатели, которые входят в состав пользовательского меню Архив, отобразится окно с сообщением, что требуемый макрос не обнаружен.

Рис. 3.13. Добавление пользовательского меню


Такое же меню (см. рис. 3.13) появится на вкладке Надстройки после применения макроса, код которого приведен в листинге 3.44.

Листинг 3.44. Создание пользовательского меню (вариант 2)

Sub AddCustomMenu1()

' Добавление меню с названием «Архив» в часть меню, _

относящуюся к рабочей книге

With MenuBars(«Worksheet»).Menus.Add(Caption:="Архив")

' Добавление кнопки

.MenuItems.Add Caption:="Просмотр", OnAction:="Макрос1"

' Добавление подменю

With .MenuItems.AddMenu(Caption:="База данных")

' Добавление пунктов подменю

MenuItems.Add Caption:="Поставщики", OnAction:="Макрос2"

.MenuItems.Add Caption:="Покупатели", OnAction:="Макрос3"

End With

End With

End Sub

К аналогичному результату приведет использование также такого макроса (листинг 3.45).

Листинг 3.45. Создание пользовательского меню (вариант 3)

Sub AddCustomMenu2()

' Добавление меню с названием «Архив» в часть меню, _

относящуюся к рабочей книге

With MenuBars(«Worksheet»).Menus.Add(Caption:="Архив")

' Добавление кнопки

.MenuItems.Add Caption:="Просмотр", OnAction:="Макрос1"

' Добавление подменю

With .MenuItems.AddMenu(Caption:="База данных")

' Добавление первого пункта подменю

With .MenuItems.Add(Caption:="Поставщики")

' Настройка кнопки

.OnAction = «Макрос2»

End With

' Добавление второго пункта подменю

With .MenuItems.Add(Caption:="Покупатели")

' Настройка кнопки

.OnAction = «Макрос3»

End With

End With

End With

End Sub

Как и в первом случае, два последних макроса предусматривают использование дополнительных макросов Макрос1, Макрос2 и Макрос3.

Проверка наличия файла по указанному пути

При необходимости можно быстро проверить, существует ли файл по указанному адресу. Чаще всего для этого используется макрос, приведенный в листинге 3.46 (путь и название файла условные, взяты только для примера).

Листинг 3.46. Проверка наличия файла (вариант 1)

Sub VerifyFileLocation()

Dim strFileName As String

Dim strFileTitle As String

' Имя и путь искомого файла

strFileTitle = «primer.xls»

strFileName = «C:\Документы\primer.xls»

' Проверка наличия файла (функция Dir возвращает пустую _

строку, если по указанному пути файл обнаружить не удалось)

If Dir(strFileName) <> "" Then

MsgBox "Файл " & strFileTitle & « найден»

Else

MsgBox "Файл " & strFileTitle & « не найден»

End If

End Sub

Результатом выполнения данного макроса является выводимое на экран окно, в котором сообщается, существует данный файл по указанному адресу или нет (рис. 3.14).

Рис. 3.14. Результат поиска файла


Для такой же проверки можно применить макрос, код которого приведен в листинге 3.47 (путь и название файла условны).

Листинг 3.47. Проверка наличия файла (вариант 2)

Sub VerifyFileLocation1()

Dim strFileName As String

' Имя искомого файла

strFileName = «C:\Документы\primer.xls»

' Проверка наличия файла (функция Dir возвращает пустую _

строку, если по указанному пути файл обнаружить не удалось)

If Dir(strFileName) <> "" Then

MsgBox "Файл " & strFileName & « найден»

Else

MsgBox "Файл " & strFileName & « не найден»

End If

End Sub

После того как макрос будет применен, на экране также появится окно, аналогичное изображенному на рис. 3.14, с информационным сообщением о результатах проверки.

В приведенных выше макросах мы напрямую указывали имя искомого файла. Однако такой подход не всегда приемлем, поэтому иногда целесообразнее использовать макрос, код которого приведен в листинге 3.48.

Листинг 3.48. Поиск нужного файла

Sub FileSearch()

Dim strFileName As String

Dim strFolder As String

Dim strFullPath As String

' Задание имени папки для поиска

strFolder = InputBox(«Определите папку:»)

If strFolder = "" Then Exit Sub

' Задание имена файла для поиска

strFileName = Application.InputBox(«Введите имя файла:»)

If strFileName = "" Then Exit Sub

' При необходимости дополняем имя папки "\"

If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"

' Полный путь файла

strFullPath = strFolder & strFileName

' Вывод окна с отчетом о поиске средствами VBA

MsgBox «Использование команды VBA...» & vbCrLf & vbCrLf & _

dhSearchVBA(strFullPath), vbInformation, strFullPath

' Вывод окна с отчетом о поиске средствами объекта _