- •Оглавление
- •Глава 2. Рабочая область Microsoft Excel 7
- •Глава 3. Создание трюков с помощью макросов 52
- •Глава 4. Трюки и эффекты с помощником 125
- •Закрытие рабочей книги только при выполнении условия
- •Быстрое удаление из рабочей книги ненужных имен
- •Сортировка листов в текущей рабочей книге
- •Импорт данных, для которых нужно более 256 столбцов
- •Рабочий лист Новый лист — через макрос
- •Блокировка использования контекстного меню
- •Вставка колонтитула с именем книги, листа и текущей датой
- •Проверка существования листа
- •Проверка, защищен ли рабочий лист
- •Сколько страниц на всех листах?
- •Автоматический пересчет данных таблицы при изменении ее значений
- •Ячейка и диапазон
- •Второй способ
- •Третий способ
- •Помещение в ячейку электронных часов
- •Создание цветной границы диапазона
- •Непосредственный ввод данных
- •Последовательный ввод данных
- •Быстрое выделение ячеек с отрицательными значениями
- •Получение информации о выделенном диапазоне
- •Панель инструментов изменения числового формата ячейки
- •Тестирование скорости чтения и записи диапазонов
- •Разработка и применение полезных пользовательских функций Объединение данных диапазона
- •Объединение данных с учетом форматов
- •Эксперименты с датой
- •Выбор из текста всех чисел
- •Прописная буква только в начале текста
- •Перевод чисел в «деньги»
- •Подсчет количества повторов искомого текста
- •Суммирование данных только видимых ячеек
- •При суммировании — курсор внутри диапазона
- •Начисление процентов в зависимости от суммы
- •Еще о расчете процентов
- •Сводный пример расчета комиссионного вознаграждения
- •Подсчет количества ячеек, содержащих указанные значения
- •Подсчет количества видимых ячеек в диапазоне
- •Поиск ближайшего понедельника
- •Подсчет количества полных лет
- •Проверка, была ли сохранена рабочая книга
- •Расчет средневзвешенного значения
- •Преобразование номера месяца в его название
- •Отображение текста «задом наперед»
- •Поиск максимального значения на всех листах книги
- •Использование относительных ссылок
- •Определение типа данных ячейки
- •Выделение из текста произвольного элемента
- •Генератор случайных чисел
- •Случайные числа — на основании диапазона
- •Глава 3. Создание трюков с помощью макросов Подсчет количества открытий файла
- •Получение «закрытой» информации
- •Произвольный текст в строке состояния
- •Быстрое изменение заголовка окна
- •Ввод данных с помощью диалогового окна
- •Применение функции без ввода ее в ячейку
- •Скрытие строк и столбцов от посторонних
- •Быстрое выделение ячеек, расположенных через интервал
- •Определение количества ячеек в диапазоне и суммы их значений
- •Подсчет именованных объектов
- •Быстрый поиск курсора
- •Создание списка примечаний рабочего листа
- •Несколько трюков в одном примере
- •Дополнение панели инструментов
- •Примеры создания панелей инструментов
- •Формирование пользовательского меню
- •Проверка наличия файла по указанному пути
- •Автоматизация удаления файлов
- •Перечень имен листов в виде гиперссылок
- •Удаление пустых строк на рабочем листе
- •Запись текущих данных в текстовый файл
- •Экспорт и импорт данных
- •Одновременное умножение всех данных диапазона
- •Преобразование таблицыExcelв html-формат
- •Поиск данных нештатными средствами
- •Включение автофильтра с помощью макроса
- •Быстрая вставка фамилий должностных лиц в документ
- •Вызов окна настройки шрифта
- •Вывод информации о текущем документе
- •Вывод результата расчетов в отдельном окне
- •Вывод разрешения монитора
- •Что открыто в данный момент?
- •Создание бегущей строки
- •Создание бегущей картинки
- •Мигающая ячейка
- •Вращающиеся автофигуры
- •Вызов таблицы цветов
- •Создание калькулятора
- •Еще о создании пользовательских меню Меню с пользовательскими командами
- •Замена стандартного меню пользовательским
- •Склонение фамилии, имени и отчества
- •Получение информации об используемом принтере
- •Вывод текущей даты и времени
- •Автоматическое создание документовWordна основе табличных данныхExcel
- •Создание списка панелей инструментов и контекстных меню
- •Создание списка пунктов главного менюExcel
- •Создание списка пунктов контекстных меню
- •Отображение панели инструментов при определенном условии
- •Скрытие и отображение панелей инструментов
- •Создание меню на основе данных рабочего листа
- •Создание контекстного меню
- •Просмотр содержимого папки
- •Получение информации о состоянии дисков
- •Расчет среднего арифметического
- •Вывод списка доступных шрифтов
- •Обработка сразу нескольких внешних файлов
- •Запуск таблицы символов изExcel
- •Создание раскрывающегося списка
- •Добавление команды в меню Добавление команды в меню Сервис
- •Добавление команды в меню Вид
- •Глава 4. Трюки и эффекты с помощником Мультфильм с помощником в главной роли
- •Дополнение помощника текстом, заголовком, кнопкой и значком
- •Новые параметры помощника
- •Использование помощника для выбора цвета заливки
- •Глава 5. Эксперименты с диаграммами Построение диаграммы с помощью макроса
- •Сохранение диаграммы в отдельном файле
- •Построение и удаление диаграммы нажатием одной кнопки
- •Вывод списка диаграмм в отдельном окне
- •Применение случайной цветовой палитры
- •Эффект прозрачности диаграммы
- •Построение диаграммы на основе данных нескольких рабочих листов
- •Создание подписей к данным диаграммы
- •Глава 6. Создание полезных программ Программа для составления кроссвордов
- •Игра «Минное поле»
- •Игра «Угадай животное»
- •Расчет на основании ячеек определенного цвета
Запуск таблицы символов изExcel
Листинг 3.106.Вызов таблицы символов
SubShowSymbolTable()
On Error Resume Next
' Запуск Charmap.exe- таблицы символов
Shell "Charmap.exe", vbNormalFocus
If Err <> 0 Then
MsgBox"Невозможно запустить таблицу символов.",vbCritical
End If
End Sub
Листинг 3.107. Таблица символов
' Декларация API-функций:
' для открытия процесса
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
' для получения кода завершения процесса
Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
' для закрытия процесса
Declare Function CloseHandle Lib "kernel32" _
(hProcess) As Long
Sub ShowSymbolTable1()
Dim lProcessID As Long
Dim hProcess As Long
Dim lExitCode As Long
On Error Resume Next
' Запуск таблицы символов (Charman.exe). Функция возвращает _
идентификатор созданного процесса
lProcessID=Shell("Charmap.exe", 1)
IfErr<> 0Then
MsgBox"Нельзя запуститьCharman.exe",vbCritical, "Ошибка"
ExitSub
EndIf
' Открытие процесса по идентификатору (lProcessID). Функция _
возвращает дескриптор процесса (handle)
hProcess = OpenProcess(&H400, False, lProcessID)
' Ждем, пока процесс завершится, для этого периодически _
получаем код завершения процесса (пока Charman.exeисполняется, _
функция GetExitCodeProcessвозвращает &H103)
Do
GetExitCodeProcesshProcess,lExitCode
DoEvents
LoopWhilelExitCode= &H103
' Закрытие процесса
CloseHandle(hProcess)
' Вывод на экран информационного сообщения
MsgBox"Charmap.exeзавершает свою работу"
EndSub
Создание раскрывающегося списка
Листинг 3.108.Создание панели со списком
SubCreatePanel()
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")
Nexti
' Выделение первого месяца
.ListIndex= 1
EndWith
' Показываем созданную панель
.Visible = True
End With
End Sub
SubSetMonth()
' Перенос названия выделенного месяца в ячейку
On Error Resume Next
With CommandBars("Список месяцев").Controls("DateDD")
ActiveCell.Value = .List(.ListIndex)
End With
EndSub
Добавление команды в меню Добавление команды в меню Сервис
Листинг 3.109.Новая команда в меню Сервис
SubAddMenuItem()
DimcbrpMenuAsCommandBarPopup
' Удаление аналогичной команды (при ее наличии)
CallDeleteMenuItem
' Получение доступа к меню "Сервис"
Set cbrpMenu = CommandBars(1).FindControl(ID:=30007)
IfcbrpMenuIsNothingThen
' Не удалось получить доступ
MsgBox"Невозможно добавить элемент."
ExitSub
Else
' Добавление новой команды в меню
With cbrpMenu.Controls.Add(Type:=msoControlButton)
' Название команды
.Caption= "Очистить в&се, кроме формул"
' Значок
.FaceId= 348
' Сочетание клавиш (только надпись на кнопке)
.ShortcutText= "Ctrl+Shift+C"
' Сопоставленный макрос
.OnAction= "ExecuteCommand"
' Добавление разделителя перед командой
.BeginGroup = True
End With
End If
' Сопоставление с макросом сочетания клавиш Ctrl+Shift+C
Application.MacroOptions _
Macro:="ExecuteCommand", _
HasShortcutKey:=True, _
ShortcutKey:="C"
End Sub
Sub ExecuteCommand()
' Очистка содержимого всех ячеек (кроме формул)
On Error Resume Next
Cells.SpecialCells(xlCellTypeConstants, 23).ClearContents
EndSub
SubDeleteMenuItem()
' Удаление команды из меню
On Error Resume Next
CommandBars(1).FindControl(ID:=30007). _
Controls("Очистить в&се, кроме формул").Delete
EndSub