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

Нередко перед тем как вывести данные на печать пользователь задумывается: а сколько страниц займет печатная форма документа? Для получения ответа на этот вопрос следует написать и применить макрос, код которого приведен в листинге 2.14 (данный код нужно набрать в стандартном модуле редактора VBA).

Листинг 2.14. Подсчет страниц

Sub GetPrintPagesCount()

Dim wshtSheet As Worksheet

Dim intPagesCount As Integer

' Суммирование количества страниц, необходимых для печати всех _

листов книги

For Each wshtSheet In Worksheets

intPagesCount = intPagesCount + (wshtSheet.HPageBreaks.Count

+ 1) * _

(wshtSheet.VPageBreaks.Count + 1)

Next

MsgBox "Всего страниц: " & intPagesCount

End Sub

Программа вычисляет количество необходимых для печати страниц на основе данных о горизонтальных и вертикальных разрывах страницы на листе (использование свойств HPageBreakers. Count и VPageBreakers. Count дает информацию о количестве горизонтальных и вертикальных разрывов страниц листа соответственно). Когда мы узнали, сколько разрывов страниц на листе, вычислить количество самих страниц не представляет большого труда (о чем свидетельствует простота используемого для этого расчета выражения: (wshtSheet. HPageBreaks. Count + 1) * (wshtSheet.VPageBreaks. Count + 1)).

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

Автоматический пересчет данных таблицы при изменении ее значений

Часто в процессе работы возникает необходимость пересортировки данных таблицы в зависимости от того, как они изменяются. Этот процесс целесообразно автоматизировать (особенно при работе с большими объемами информации). Рассмотрим решение этой проблемы на конкретном примере.

Предположим, что в таблице в ячейках с Al по All содержится перечень торговых точек (магазинов), а в ячейках с В1 по В11 – дневная выручка каждой торговой точки. Нам нужно выделить красным жирным шрифтом максимальное значение, а синим – минимальное. Остальные данные отображаются шрифтом, используемым по умолчанию. Нам также нужно пометить желтым цветом ячейки, отображающие выручку выше средней всех торговых точек. При этом необходимо сделать так, чтобы таблица соответствующим образом автоматически переформировывалась при внесении в нее изменений. Решить эту задачу поможет код, приведенный в листинге 2.15 (этот код должен быть помещен в модуль рабочего листа).

Листинг 2.15. Переформирование таблицы

Sub Worksheet_Change(ByVal Target As Range)

Dim rgData As Range

Dim cell As Range

Dim dblMax As Double, dblMin As Double, dblAverage As Double

' Получение контролируемого диапазона ячеек

Set rgData = Range(«B2:B11»)

' Проверка, не входит ли измененная ячейка в контролируемый _

диапазон

If Not (Application.Intersect(Target, rgData) Is Nothing) Then

If Application.WorksheetFunction.CountA(rgData) > 0 Then

' Изменена ячейка из контролируемого диапазона

' Заново рассчитываем минимальное, максимальное и среднее _

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

dblMin = Application.WorksheetFunction.Min(rgData)