×
Traktatov.net » Excel. Трюки и эффекты » Читать онлайн
Страница 117 из 146 Настройки

Sub ListOfFonts()

Dim cbrcFonts As CommandBarControl

Dim cbrBar As CommandBar

Dim i As Integer

' Получение доступа к списку шрифтов (элемент управления в виде _

раскрывающегося списка на панели инструментов «Форматирование»)

Set cbrcFonts = Application.CommandBars(«Formatting»). _

FindControl(ID:=1728)

If cbrcFonts Is Nothing Then

' Панель «Форматирование» не открыта – откроем ее

Set cbrBar = Application.CommandBars.Add

Set cbrcFonts = cbrBar.Controls.Add(ID:=1728)

End If

' Подготовка к выводу шрифтов (очистка ячеек)

Range(«A:A»).ClearContents

' Вывод списка шрифтов в столбец "A" текущего листа

For i = 0 To cbrcFonts.ListCount – 1

Cells(i + 1, 1) = cbrcFonts.List(i + 1)

Next i

' Закрытие панели инструментов «Форматирование», если мы были _

вынуждены ее открывать

On Error Resume Next

cbrBar.Delete

End Sub

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

Создание раскрывающегося списка

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

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

Для решения поставленной задачи напишем в стандартном модуле редактора VBA код, который представлен в листинге 3.102.

Листинг 3.102. Создание панели со списком

Sub CreatePanel()

Dim i As Integer

On Error Resume Next

' Удаление одноименной панели (если есть)

CommandBars(«Список месяцев»).Delete

On Error GoTo 0

' Создание панели «Список месяцев»

With CommandBars.Add

.Name = «Список месяцев»

' Создание списка месяцев

With .Controls.Add(Type:=msoControlDropdown)

' Настройка (имя, макрос, стиль)

.Caption = «DateDD»

.OnAction = «SetMonth»

.Style = msoButtonAutomatic

' Добавление в список названий месяцев

For i = 1 To 12

.AddItem Format(DateSerial(1, i, 1), «mmmm»)

Next i

' Выделение первого месяца

.ListIndex = 1

End With

' Показываем созданную панель

.Visible = True

End With

End Sub

Sub SetMonth()

' Перенос названия выделенного месяца в ячейку

On Error Resume Next

With CommandBars(«Список месяцев»).Controls(«DateDD»)

ActiveCell.Value = .List(.ListIndex)

End With

End Sub

В результате написания данного кода будут созданы два макроса: CreatePanel и SetMonth. Первый предназначен для создания панели инструментов с раскрывающимся списком (рис. 3.40), а второй – для помещения выбранной позиции списка в активную ячейку рабочего листа.

Рис. 3.40. Созданный раскрывающийся список


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