Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика

.pdf
Скачиваний:
24
Добавлен:
03.05.2015
Размер:
3.59 Mб
Скачать

91

хранять столбец и (или) строку ссылки, то перед символом столбца (номером строки) следует поставить знак "$". Так что если в предыдущем примере указать в А2 ссылку на "$F8", то при перемещении А2 в С9 ссылка изменится на F15, а если в А2 укажем ссылку на "$F$8", то при любом перемещении ячейки А2 ссылка не изменится.

Среди стандартных операций над ячейками следует отметить операцию "автозаполнения", позволяющую автоматически создавать арифметическую прогрессию. Для этого в двух подряд идущих (вертикально) ячейках указываются два соседних члена арифметической прогрессии, например, -1 и -0.8, выделяются курсором обе ячейки и рамка выделения за правый нижний уголок (курсор при этом принимает вид крестика – см. рис. 24) тянется вниз до необходимого значения (в данном случае получится последовате-

льность -1, -0.8, -0.6, -0.4, ...).

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

все последовательные значения вычисленной функции. Например, если ячейки А1:А21 заполнены числами 0, 0.15, 0.3, 0.45, ..., 3, а в ячейку В1 вставлена формула "= SIN(A1)", то при протягивании В1 вниз до В21 получим последовательность значений синуса: Sin(0), Sin(0.15), Sin(0.3), ..., Sin(3) (влияние относительной ссылки).

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

2.3. ЭЛЕМЕНТЫ УПРАВЛЕНИЯ

Элементы управления практически используются для придания листу функциональных возможностей. Элементы управления могут быть различными по сложности, начиная от простых кнопок (Command Button) до элементов управления мультимедиа. Excel позволяет использовать как встроенные элементы управления, так и пользовательские. Это элементы ActiveX (ActiveX controls). Некоторое подмножество элементов управления является общим для всех приложений Ms Office. В Excel панель элементов управления можно вызвать из меню "Сервис" VBA (версия не старше 2003 г.), либо "Разработчик" "Вставить элементы управления" (версия 2007 г. и старше, см. рис. 25). При размещении элементов управления на рабочем листе активизируется "Конструктор" (с пиктограммой "треугольниккарандаш"). В режиме крнструктора щелчок правой кнопкой мыши по втавленому элементу вызывает меню, выбрав в котором пункт

92

 

 

 

 

 

исходный

 

 

 

 

 

 

 

 

 

 

 

 

 

текст

 

 

 

 

 

поле

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

флажок

 

 

 

 

 

переклю-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чатель

 

 

 

 

 

кнопка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поле со

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

список

 

 

 

 

 

 

 

 

 

 

 

 

 

 

списком

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выклю-

 

 

 

 

 

счетчик

 

 

 

 

 

 

чатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

полоса

 

 

 

 

 

 

 

другие

 

 

 

 

 

прокрутки

 

рисунок

 

 

элементы

 

 

надпись

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 25

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

Щелкнув мышкой на элементе управления панели и перенеся курсор на рабочий лист, увидим, что курсор преобразуется в крестик, которым можно определить на листе место для выбранного элемента управления. Щелкнув правой кнопкой мыши на выбранном поле, получим меню, где можно выбрать просмотр свойств элемента или заготовку кода. Свойства элемента можно получить и непосредственно из панели инструментов (пиктограмма "свойства").

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

Перечислим общие свойства элементов управления:

1.Name - имя (текст),

2.Autosize - установка наименьшего размера (True, False),

3.Enabled - доступность (True, False),

4.Font (шрифт),

5.Left, Top, Width, Height - положение на экране и размеры,

6.Locked - защита от редактирования (True, False),

7.Visible - визуализация (True, False),

8.PrintObject - печатание при печати листа (True, False).

93

Общие события (реакция на щелчок мыши, ввод кода):

1. Click - щелчок мышкой по (объекту),

2. DblClick - двойной щелчок мышкой,

3. KeyPress - нажатие клавиши на клавиатуре, если элемент активизирован (имеет "фокус"),

4. Got Focus - приобретение "фокуса",

5. Lost Focus - потеря "фокуса",

6. Mouse Down

-"- Move - реакция на действие мыши ,

-"- Up

7. Before DragOver

 

 

 

 

- реакция на перетаскивание элемента .

 

 

 

 

 

-"- DropOrPaste

 

Некоторые специфические свойства и методы.

Флажок (CheckBox) представляет возможность выбора. Свойства: Caption - заголовок, текст рядом с флажком,

Value = True, если флажок установлен, False, если флажок снят, Null - флажок неопределен (если свойство

TripleState = True),

LinkedCell - связанная сo свойством Value ячейка. Событие: Click - отклик на изменение состояния флажка (за-

пускает соответствующий код).

Кнопка (CommandButton) - обычно используется для запуска подпрограмм.

Свойства: Caption - текст на кнопке,

Picture - графическое изображение на кнопке (иконка), TakeFocusOnClick - свойство брать "активность на себя"

(True, False). Желательно устанавливать False. События: Click - ответ на нажатие кнопки (запуск кода).

Список (ListBox) позволяет выделить один или несколько элементов списка, в зависимости от выделения запускает тот или иной код (по типу Select Case). Можно добавить полосу прокрутки.

Свойства: List - массив строк списка,

ListCount - количество элементов в списке, ListFillRange - диапазон листа с элементами списка, ListIndex - индекс выбранного элемента списка, Value - текст, выбранный в списке,

LinkedCell - ячейка рабочего листа, где появляется значе-

ние .Value,

Selected - массив булевских значений True, False в соответствии с выбранным элементом списка, и др.

События: Click – ответ на щелчок мышью, Change – реакция на

94

изменение списка, и др.

Выключатель (ToggleButton) по свойствам и событиям мало отличается от кнопки.

Поле (TextBox) - позволяет вводить текст в заданную область (и менять его программно).

Свойства: Text - устанавливает и возвращает текст, Multiline - допускает многострочный текст(True, False), MaxLenght - наибольшая длина текста (целое число),

LinkedCell - ячейка рабочего листа,содержащая отображаемый текст.

PassWordChar – символ, отображаемый при вводе пароля, ScrollBars – наличие полосы прокрутки,

WordWrap – разрешение переноса на другую строку. События: Change – реакция на изменение текста,

GotFocus – при фокусе на текстовом поле, KeyPress – реакция на введенный символ, и др.

Переключатель (OptionButton) - по свойствам и событиям мало отличается от кнопки.

Поле со списком (ComboBox):

Свойства: как у списка (ListBox), и еще

ListRows - количество элементов в раскрывающемся списке.

Надпись (Label) - отображение надписей, нечто среднее между элементами поле и кнопка и имеет сходные с ними свойства и события. Существенная разница в том, что в поле надписи нельзя вводить информацию с клавиатуры, вывод осуществляется в ее свойстве "Caption".

Важным элементом управления для создания интерфейса и диалоговых окон является пользовательская форма (UserForm). Она помещается на рабочий лист в меню редактора VBA: Insert UserForm. Форма является контейнером для своих элементов управления, которые, в общем, повторяют элементы ActiveX, но имеют и некоторые специфические, как, например, рамка (Frame), альтернативный список (TabStrip), и др. Кроме общих для всех форм свойств следует отметить важное свойство ShowModal (по умолчанию True). Это свойство запрещает какие-либо действия вне "сферы влияния" формы, пока она открыта, т.е. находится на рабочем листе. Установив значение ShowModal = False, можно от этого ограничения избавиться. Форма появляется на рабочем листе лишь после выполнения команды UserForm1.Show (если это только одна форма), вставленной, например, в код кнопки (CommandButton). Можно заставить форму появляться автоматически при активизации нужного рабочего листа. Для этого в кодовой странице листа следует записать код:

95

Sub WorkSheet_Activate()

UserForm1.Show

End Sub .

В этой же подпрограмме можно установить все необходимые свойства формы.

Пример 1. Создадим простейший арифмометр. Введем пользовательскую форму (UserForm1) со свойством ShowModal = False. Поместим на нее надписи: Label1 с текстом (Caption) "X = ", Label2 – "Y =", Label3 – "Res:", Label4 – "Mem:", Label5 и Label6 с пустым заголовком для вывода результата и содержимого "памяти". Рядом с Label1 и Label2 разместим два текстовых окна TextBox1, TextBox2 для ввода значений х и у (во всех случаях выберем шрифт – Font – так, чтобы надписи были достаточно выразителтными). Справа от этих элементов поместим список арифметических операций ListBox1, выбрав подходящий шрифт, стиль окна (ListStyle = 1 – fmListStyleOption), область заполнения (собственно список операций) RowSource z1: z8 (за пределами видимости). В ячейки z1: z8 рабочего листа введем имена арифметических операций (пусть это будут: x +

y, x – y, x * y, x / y, sqr(x), x <-> y, Res <-> Mem, Mem -> x). Теперь,

дважды щелкнув мышкой по списку, получим в редактое VBA

заготовку кода: Private Sub ListBox1_Click() ... End Sub. Осталось только заполнить его (щелчок мышкой по элементу списка возвращает интекс выбранного элемента, индексация начинается с нуля):

Private Sub ListBox1_Click()

Dim x As Double, y As Double, z As Double Const max As Double = 1E+35

x = Val(TextBox1.Text): y = Val(TextBox2.Text) 'считывание из текстовых окон

Select Case ListBox1.ListIndex

'***индекс выбранной операции

Case 0: z = x + y

 

Case 1: z = x - y

 

Case 2: z = x * y

 

Case 3

 

If Abs(x) > Abs(y) * max Then

'***проверка возможности деления

Label5.Caption = "Деление на ноль": Exit Sub

End If

 

z = x / y

 

Case 4

 

If x = 0 Then

'***возможность извлечения корня

z = 0

 

ElseIf x < 0 Then

 

Label5.Caption = "Отрицательное выражение" Exit Sub

Else

z = Sqr(x) End If

Рис. 27

96

Case 5: z = x: x = y: y = z

TextBox1.Text = Str(x) '***преобразование числа в текст

TextBox2.Text = Str(y)

Case 6: Label6.Caption = Label5.Caption

Case 7: TextBox1.Text = Label6.Caption End Select

Label5.Caption = Str(z) End Sub .

Таким образом, введя в текстовые поля значения х и у и выбрав мышкой в списке необходимую арифметическую операцию, в нижнем окне получим необходимый результат. Вид формы калькулятора на рабочем листе представлен на рис. 26.

Рис. 26

Пример 2. Пример формирования и выбора меню (в кафе автозаправочной станции). Поместим на рабочем листе кнопку (CommandButton1) с надписью "Заказ" для вызова формы заявок и формирования итоговой таблицы. Дадим ей имя Order. В ячейке Z1 (за пределами видимости) будем хранить количество заказанных блюд, в начале листа (левый верхний угол) будет сформирована таблица заказанных блюд с общей стоимостью. Введем, далее, рабочую форму (UserForm1), на которой разместим надписи "Your choice" (выбор), "Meals", "Drinks", кнопку (CommandButton1, это кнопка формы, не листа) для завершения заказа с надписью "O'KEY!", и серию флажков (CheckBox) с наименованиями соот-

ветствующих блюд (рис. 27). Кнопка "Order" подготавливает

рабочий лист для оформления окончательной таблицы заказа и соответствующих цен. Кнопка пользовательской формы CommandButton завершает оформление заказа и закрывает форму, оставляя на листе только таб- лицу-счет.

 

97

 

Private Sub Order_Click()

 

 

Dim n As Byte, i As Byte, s As Single

'***подготовка таблицы

Range("a1:k5").ClearContents

'***очистка области рабочего листа

Range("z1").Value = n

'***счетчик заказанных блюд

Range("a1").Value = "ITEMS:"

'***заголовок: выбрано

Range("a2").Value = "ORDERED:"

'***объем заказа

Range("a3").Value = "SUMM:"

'***заказ на сумму

UserForm1.Show: s = 0

'***отображение формы заказа

n = Range("z1").Value

'***проверка количества заказанного

If n = 0 Then Exit Sub

'***выход, если заказ пустой

For i = 2 To n + 1: s = s + Cells(3, i).Value: Next

'***подсчет суммы к оплате

Cells(4, n).Value = "TOTAL:": Cells(4, n + 1).Value = s

Range(Cells(1, 1), Cells(4, n + 1)).Select

End Sub .

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

Private Sub CheckBox7_Click() Dim w As Integer, n As Byte

If CheckBox7.Value = True Then

w = Val(InputBox("Сколько бутылок Вас удовлетворит?", , 0)) If w = 0 Then

CheckBox7.Value = False: Exit Sub End If:

With ActiveWorksheet '***занесение заказа в таблицу-счет n = .Range("z1").Value + 1

.Cells(1, n + 1).Value = " Beer"

.Cells(2, n + 1).Value = w

If w > 5 Then MsgBox "Туалет направо!", vbExclamation

.Cells(3, n + 1).Value = 60 * w

.Range("z1").Value = n End With

End If End Sub .

Кнопка на форме закрывает заказ:

Private Sub CommandButton1_Click()

CheckBox1.Value = False: CheckBox2.Value = False '***сбрасывает флажки CheckBox3.Value = False: CheckBox4.Value = False

CheckBox5.Value = False: CheckBox6.Value = False

CheckBox7.Value = False: CheckBox8.Value = False

Me.Hide

'***закрывает форму

End Sub .

 

Таблица-счет принимает вид (табл. 8):

Таблица 8

ITEMS:

Pizza

Fish

Steak

Coffee

Beer

 

 

 

 

 

 

ORDERED:

4

3

1

4

8

 

 

 

 

 

 

SUMM:

600

240

90

200

480

 

 

 

 

 

 

 

 

 

 

TOTAL:

1610

 

 

 

 

 

 

98

Заметим, что все элементы формы суть ее "дочерние" элементы, и в этой ситуации закрытие формы может выглядеть, как команда Me.Hide ("закрой меня") вместо UserForm1.Hide.

Использование других элементов управления в значительной степени следует технике приведенных примеров с учетом, разумеется, индивидуальных особенностей элементов. Например, если на форме размещена группа переключателей (OptionButton), то во всей группе может быть выбран лишь один (в отличие от флажков – их можно выбирать сколько угодно), который становится активным (все остальные сбрасываются). Если же часть переключателей разместить на форме внутри рамки (Frame – это своеобразный контейнер элементов управления), то пара выбор-сбрасывание будет "работать" либо внутри рамки, либо вне ее. Таких рамок может быть сколько угодно. Другими такими контейнерами являются элементы TabStrip и MultiPage.

2.4. ГРАФИЧЕСКИЕ СРЕДСТВА

Панель "Word Art" меню и возможность вставки произвольных автофигур, естественно, расширяет изобразительные средства Excel. Кроме того, как уже омечалось, Excel допускает вставку произвольных графических объектов и имеет втроенную систему графического представления данных (см. п. 1.9 рис. 9).

Строить графики в Excel возможно, как минимум, четырьмя способами:

1.Использование Автофигур (меню: "Вид" → "Панели инструмен-

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

2.Стандартное использование меню “Вставка диаграммы”. Курсором выбирается область листа для отображения графика, устанавливается формат и подписи к графикам. Графики могут быть реализованы как в общем тексте, так и на отдельной странице.

3.Вставка диаграммы из другого приложения (графический объект).

4.Построение графиков с помощью макросов. Здесь полезно заметить, что каждый графический объект листа это элемент объекта SHAPES, являющегося подобъектом SHEET, поэтому всякая команда построения линии в Excel должна быть методом объекта ActiveSheet.Shapes. Например, чтобы провести горизонтальную

99

стрелку, можно использовать код:

ActiveSheet.Shapes .AddLine(a, b, c, d) .Select

'*** (a, b) и (c, d) – координаты

With Selection .ShapeRange .Line

'*** начала и конца стрелки

.EndArrowheadStyle = msoArrowheadTriangle

.EndArrowheadLenght = msoArrowheadLenghtMedium

.EndArrowheadWidth = msoArrowheadWidthMedium End With .

Для построения кривой по заданным координатам (x i, y i), i = 0…n, можно использовать код (метод BuildFreeform – создание линии):

With ActiveSheet .Shapes .BuildFreeform(msoEditingAuto, x(0), y(0)) '***начало

For i = 1 To n '***добавление узлов линии

.AddNodes msoSegmentCurve, msoEditingAuto, x(i), y(i) Next

.ConvertToShape .Select '***оформление линии как графического объекта

End With .

Далее можно выбрать свойства кривой графика, например,

With Selection .ShapeRange .Line

 

.Weight = 3

'***толщина линии 3 пункта

.Style = msoLineSingle

'***однократная линия

.ForeColor.SchemeColor = 10

'***линия красного цвета

.Visible = msoTrue '***этот пункт обязателен, чтобы линия была видимой

End With .

В отличие от QBasic, где через точки с заданными координатами проводится ломаная линия, здесь автоматически строится плавная кривая.

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

Рассмотрим каждый из указанных способов.

1. Построение с помощью автофигур. Рассмотроим функцию из п.

(-1)[ln(n)]

 

x2n - 1

n!

1.10: f(x) =

 

 

 

 

. Запишем (вставив модуль) текст про-

2

n

 

 

n = 1

3n

П (1 + kx)

 

 

k = 1

 

 

 

граммы функции:

Рис.28

100

Function f(x As Single) As Single

Dim x2 As Double, n As Integer, mn As Long, q As Double Dim k As Integer, sum As Double

Const eps As Double = 0.00001

x2 = x * x: n = 1: mn = 3: q = x / (3 * (1 + x)): sum = q While Abs(q) >= eps

n = n + 1: mn = 9 * mn: q = q * x2 * Sqr(n) / (mn * (1 + n * x)) If Int(Log(n)) And 1 Then k = -1 Else k = 1

sum = sum + k * q Wend: f = sum

End Function

(правильность вычислений можно проверить, вызвав в меню View редактора VBA окно Immediate Window). Заполним ячейки А1:А11 числами 0, 1, ..., 10, а в ячейку В1 введем функцию f: меню "Вставка функций" (полный список) f с аргументом А1 (Enter). Затем за правый нижний уголог прогягиваем значения ячеек до В11. Теперь по этим данным можно построить рисунок графика: справа от таблицы с помощью меню автофигур изображаем стрелки осей координат и в нужные места помещаем надписи с буквами Х и Y (для того, чтобы надписи выглядели как элементы текста, в меню "Формат надписи" → "Цвета и линии" следует выбрать "нет заливки" и "нет линий"). Далее, в меню "линии" (панель рисования) следует выбрать "кривую" и, пока произвольным образом отмечая мышкой точки на линии, прорисовываем кривую. Щелчок правой кнопкой мыши по линии вызовет меню (рис.

28), в котором пункт "Начать изменение узлов" активизирует отмеченные мышкой точки на кривой. Эти точки можно "выправить", передвигая их нужным образом. Наконец, в меню настройки объема применим стиль 4 ко всем линиям (можно изменить также цвет и толщину линий). В результате получим рабочий лист в виде рис. 29. Такой способ (не очень точный) позволяет художественное оформление графика.

Рис. 29