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

Учеб_мет_пос_Пустовалова_Кишкурно

.pdf
Скачиваний:
44
Добавлен:
09.03.2016
Размер:
2.02 Mб
Скачать

кода, щелкнув по кнопке Исходный текст на панели инструментов Элементы управления (при этом откроется окно редактора VBA). Перейти в окно программ также можно, сделав двойной щелчок по элементу управления;

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

Когда происходит то или иное событие, то выполняется процедура обработки события, которая заключена между ключевыми словами (процедурными скобками) Sub…End Sub.

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

Для этого на панели Элементы управления надо выбрать элемент Кнопка и поместить его на рабочем листе (появится кнопка с надписью CommandButton1). Затем следует дважды щелкнуть по кнопке и откроется редактор VBA, в котором записать следующую процедуру:

Sub CommandButton1_Click() MsgBox ("Привет")

End Sub

Здесь функция MsgBox() активизирует диалоговое окно с сообщением, записанным в кавычках.

Для запуска процедуры надо перейти на лист рабочей книги Excel, выйти из режима конструирования, отжав кнопку Режим кон-

структора на панели инструментов Элементы управления, нажать на кнопку, для которой была написана процедура обработки события, и проанализировать результат.

4.2. Среда редактора Visual Basic for Application

Редактор VBA можно открыть и с помощью команды Сервис/Макрос/Редактор Visual Basic, либо щелкнув правой клавишей мыши на ярлычке одного из существующих листов и выбрав из кон-

текстного меню Вставка/Исходный текст.

Строка меню основного окна Редактора Visual Basic содержит пункты:

File – позволяет создавать, открывать, сохранять, печатать проекты, добавлять новые, удалять и сохранять существующие формы проекта, а также создавать *.ехе файлы.

31

Edit – команды редактирования объектов. Они позволяют вырезать, копировать, вставлять, удалять, связывать объекты и т. д.

View – служит для активизации необходимых окон.

Project – для добавления новых форм, модульных листов, удаления ненужных форм, установления параметров проекта и т. д.

Format – для выбора набора инструментов для компоновки элементов управления на поле экранной формы.

Debug – для отладки и редактирования программы.

Run – для проверки работоспособности программы путем ее выполнения.

Tools – для установки различных режимов работы (опций). Add-Ins – для расширения программной оболочки Visual Basic,

путем предоставления дополнительных возможностей и удобств. Windows – для изменения расположения окон проекта, для пере-

ключения между окнами.

Help – встроенная помощь и учебник по Visual Basic. Помимо основного окна в Редакторе Visual Basic есть еще:

окно проводника проекта (Project Explorer), в котором отображается состав компонент открытого проекта (по умолчанию оно открыто и находится в левой части окна редактора);

окно формы (UserForm) для создания пользовательских форм; панель инструментов (Toolbox), где показан набор пиктограмм,

представляющих элементы управления, которые могут использоваться в разрабатываемом приложении;

окно свойств (Properties), где перечислены свойства выбранного объекта, которые можно быстро изменить непосредственно в этом окне; окно кодов (Code), в котором непосредственно будет записывать-

ся программа, т. е. набор операторов данного языка программирования. Если необходимое окно отсутствует, его можно активизировать,

выполнив соответствующую команду из меню View.

Чтобы изменить цвет элементов управления, тип шрифта и т. п., надо открыть окно свойств, выполнив в контекстном меню команду Properties. Свойство Caption позволяет изменить заголовок, Font – установить шрифт, Picture – отобразить на форме рисунок, файл с которым можно открыть, нажав кнопку в правой части. Значения свойств могут меняться и программным путем.

С объектом можно производить некоторые действия (очистить интервал ячеек на рабочем листе, показать форму на экране, убрать с экрана и т. п.) с помощью методов. Форма записи метода:

Объект.Метод

32

4.3. Основные конструкции VBA

VBA не чувствителен к регистру, т. е. при вводе текста процедур могут использоваться символы как строчные, так и прописные. Новый оператор начинается с новой строки. В любом месте программы может стоять комментарий, который начинается с апострофа «’». Длинный оператор можно разбить на несколько строк, используя пробел и символ подчеркивания «_». В одной строке можно помещать несколько операторов, разделяя их двоеточием «:». Символьные значения должны заключаться в двойные кавычки.

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

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

Dim < имя переменной > As < тип переменной >

Рассмотрим некоторые типы переменных:

Integer – для целых чисел (диапазон значений от – 32 768 до 32 767), требует объем памяти в 2 байта;

Single – для вещественных (дробных) чисел одинарной точности (диапазон значений: от 3,402823Е+38 до 1,401298Е–45), требует объем памяти в 4 байта. Большие по модулю и близкие к нулю числа записываются с порядком при округлении их до семизначных цифр и определении их порядка в виде символа Е с числом, что эквивалентно умножению на 10 в указанной после символа Е степени;

String – для хранения символьных (строковых) значений, каждый символ требует объем памяти в 1 байт. Длина строки символов от 1 до 64 Кбайт;

Variant – может использоваться для хранения любых данных, требует объем памяти в 8 байт.

Допускается в одном операторе Dim определять несколько переменных и различные типы переменных. Например,

Dim i As Integer, x As Single, y As Single

33

Если переменная не объявлена, то по умолчанию ей присваивает-

ся тип Variant.

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

Таблица 4.1

Запись некоторых математических функций на языке VBA

Математическая

 

 

 

 

 

 

 

 

запись

sinx

cosx

ex

|x|

tgx

arctgx

lnx

x

 

 

 

 

 

 

 

 

 

Запись на VBA

Sin(x)

Cos(x)

Exp(x)

Abs(x)

Tan(x)

Atn(x)

Log(x)

Sqr(x)

 

 

 

 

 

 

 

 

 

Для вычисления Log числа х по основанию n следует разделить натуральный логарифм числа х на натуральный логарифм числа n:

logn x

log (x)

.

 

 

log (n)

Арифметические выражения. Это выражения, состоящие из кон-

стант, переменных, встроенных функций, соединенных знаками арифметических операций.

Арифметические операции задаются следующими символами: + (сложение), (вычитание), * (умножение), / (деление), ^ (возведение в степень), \ – (целая часть от деления), Mod – (остаток от деления), а сами выражения записываются в одну строку.

Например, запись выражения:

sin3x

ln(x 1) tgx

 

 

 

 

 

 

4 x3 ex 3

 

на языке VBA будет выглядеть следующим образом:

Sin(3*x)+(Log(x-1)+Tan(x))/(x^3+Exp(x+3))^(1/4)

При вычислении арифметических выражений соблюдается следующий приоритет выполнения операций: сначала вычисляются встроенные функции; затем возведение в степень; умножение и деление; целая часть от деления; остаток от деления; сложение и вычитание. Изменить приоритет можно с помощью скобок.

Для работы со строковыми переменными используется оператор конкатенации (слияния) строк: & , либо + .

Пример процедуры, запрашивающей имя (например, Иван) и выводящей в окно сообщений текст: «Сообщение пользователю Иван».

34

Private Sub CommandButton4_Click() nUserName = InputBox("Введите ваше имя?")

MsgBox "Сообщение пользователю" & " " & nUserName

End Sub

Оператор присваивания. Этот оператор имеет следующий синтаксис: <имя переменной> = <арифметическое выражение >

Пример записи оператора присваивания:

х = 5*a + log(a + 0.5)-a^3

Здесь символ «=» − это не знак равенства, а знак присваивания. Ввод информации. Существует множество способов пользова-

тельского ввода информации. Рассмотрим ввод с клавиатуры и ввод из ячеек рабочего листа Excel.

Ввод с клавиатуры осуществляется с помощью встроенной функции InputBox, которая при выполнении процедуры выводит на экран свое окно. Например, при выполнении строки программного кода:

a = InputBox("Введите фамилию")

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

Полоса для ввода значения

Рис. 4.2. Окно диалогового ввода функции InputBox

При этом возвращаемое функцией InputBox значение имеет тип String. Поэтому для ввода значения числовой переменной в программе необходимо дополнительно привести получаемое значение к числовому типу встроенной функцией Val. Например, для ввода значения числа 7.35 в переменную b необходимо записать следующую строку программного кода:

b = Val(InputBox("Введите значение b"))

При вводе вещественного числа целая часть отделяется от дробной точкой. Число в степенной форме, например, 6,2 10–8 записывается при вводе как 6.2Е–8.

35

Ввод из ячейки рабочего листа Excel рассмотрим на примере.

Если в ячейке A4 листа с именем Лист2 находится некоторое значение, то его можно ввести в переменную х, используя оператор присваивания:

x = Worksheets("Лист2").Range("A4") или x = Worksheets("Лист2").Cells(4, 1),

где – Worksheets("Лист2") – рабочий лист Excel с именем «Лист2», Range("A4") – ячейка с именем А4, Cells(4, 1) – ячейка с номером строки – 4 и номером столбца – 1.

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

Вывод значений в окно сообщений можно осуществить с помощью функции MsgBox. Например, оператор MsgBox y выводит в окно сообщений значение переменной y.

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

ление на нуль.

Число, выводимое в окно, можно форматировать (указывать количество знаков до и после запятой). Для этого используется функция Format(x, "##.##"), где x переменная, ##.## – формат числа (указывает количество знаков до и после запятой).

Для вывода нескольких значений в одно текстовое окно используется операция конкатенации &, например:

MsgBox ("Значение x=" & Format(x, "##.#"))

Вывод результатов в ячейки листа Excel рассмотрим на примере вывода значения переменной х в ячейку A4:

Worksheets("Лист1").Range("A4") = x или

Worksheets("Лист1").Cells(4, 1) = x

4.4.Линейные программы

Влинейных программах выполняются расчеты по формулам и

другие действия, не требующие разветвления процессов и их повторов. Пример. Пусть требуется для x = 1,5 a = 3,75 m = 0.5∙10-4 вычис-

лить значения переменных w и z по формулам:

36

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln

 

w

 

 

.

w 0,5 xa

 

(1 m2 )

 

z cos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 w

 

 

 

 

 

 

Оформим Лист2 согласно образцу на рис 4.3:

Рис. 4.3. Образец оформления линейной программы на листе Excel

Для кнопки «Вычислить» напишем следующую процедуру:

Private Sub CommandButton1_Click()

Dim x As Single, a As Single, m As Single, w As Single, z As Single x = Worksheets("Лист2").Range("c17")

a = Worksheets("Лист2").Range("c18")

m = Worksheets("Лист2").Range("c19") w = 0.5 * Sqr(x * a * Abs(1 - m * m))

z = Cos(Log(Abs(w)) / (2 + w)) Worksheets("Лист2").Range("g25") = w Worksheets("Лист2").Range("h25") = z End Sub

Здесь ввод исходных данных и вывод результата организован из ячеек рабочего листа и в ячейки рабочего листа.

Если использовать относительные ссылки, то эта же процедура может выглядеть следующим образом:

Private Sub CommandButton1_Click()

Dim x As Single, a As Single, m As Single, w As Single, z As Single x = Worksheets("Лист1").Cells(17, 3)

37

a = Worksheets("Лист1").Cells(18, 3)

m = Worksheets("Лист1").Cells(19, 3) w = exp(x) * a * (1 - m ^ 2)

z = Sin(w / (2 + w)) Worksheets("Лист1").Cells(24, 7) = w Worksheets("Лист1").Cells(24, 8) = z End Sub

Можно организовать ввод данных с клавиатуры, а вывод результатов – в окно сообщений. Тогда процедура примет такой вид:

Private Sub CommandButton2_Click() Dim x As Single, a As Single

Dim m As Single, w As Single Dim z As Single

x = Val(InputBox(“Введите x “)) a = Val(InputBox(“Введите a”)) m= Val(InputBox(“Введите m”)) w = 0.5*Sqr(x*a*abs(1 - m * m)) z = cos(log(w)/( 2 + w))

MsgBox (“w=” & w )

MsgBox (“z=” & z )

End Sub

Для проверки результатов введем в ячейку G24 формулу:

=0,5*КОРЕНЬ((C17*C18)*ABS(1-C19*C19))

А в ячейку H24:

=COS(LN(ABS(G24))/(2+G24))

Для очистки ячеек рабочего листа можно использовать метод

Clear для объектов Cells() и Range().

Программный код кнопки «Очистить» будет выглядеть следующим образом:

Private Sub CommandButton4_Click() Worksheets("Лист2").Range("g25").Clear Worksheets("Лист2").Range("h25").Clear End Sub

Если необходимо очистить диапазон ячеек либо все ячейки рабочего листа, то нужно записать:

Private Sub CommandButton4_Click() Worksheets("Лист1").Range("d8:d12").Clear очистка диапазона ячеек

38

Worksheets("Лист2").Сells.Clear очистка всех ячеек

End Sub

Свойства ячеек также можно менять программно, например, если нужно вывести значения на рабочем листе «Лист1», используя размер 14 и шрифт Times New Roman, то надо записать в процедуре перед выводом данных:

Worksheets("Лист1").Range("a2").Font.Name = "Times New Roman" Worksheets("Лист1").Range("a2").Font.Size = 14

Отладка программы. Если при вводе оператора была допущена синтаксическая ошибка, то редактор VBA помечает строку красным цветом. При возникновении ошибки во время запуска программы (например, деление на 0) происходит прерывание выполнения программы и вывод сообщения о типе ошибки. При этом в окне сообщения можно выбрать режим остановки программы End или перехода в окно отладки программы Debug. Строка с ошибкой или процедура, где возникла ошибка, будет помечена желтым цветом.

Для исправления ошибки нужно прервать программу, нажав

кнопку Reset на панели инструментов редактора VBA, исправить ее и запустить программу заново. Или исправить ошибку, затем про-

должить выполнение программы, нажав кнопку Continue (Run).

4.5.Содержание заданий

1.Создать командную кнопку с заголовком «Пример расчета». Набрать для этой командной кнопки приведенный выше текст линейной программы и выполнить программу щелчком мыши по кнопке.

2.Создать командную кнопку c заголовком «Расчет по формулам» и записать для нее программу по условию, приведенному в табл. 4. 2.

Выполнить программу и проанализировать результаты.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 4.2

 

 

 

 

 

 

 

Формула для вычислений

 

Исходные данные

1

 

 

 

k

 

 

ln(2 + x) + x2

k

4; x 5 10

5

;

 

t = 2

 

 

 

 

 

 

a

 

 

a

2,1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u =

 

 

 

t

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(t2

 

t

1)

 

 

 

 

 

 

y

(k 3

 

t 2 )

 

 

 

 

 

 

 

e

0,1 u

 

 

 

 

 

 

 

 

 

 

 

39

Продолжение табл. 4.2

 

 

 

 

 

 

Формула для вычислений

 

Исходные данные

2 z

1

 

 

 

 

sin2

 

 

 

n

2;b 0,125;

 

 

 

 

x nb n

(x

1)

x

1, 25 10

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

(e b

1)

 

 

 

 

 

 

 

 

2n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(

n

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

4

 

 

 

 

 

 

 

 

 

 

(1

 

b)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

d

arctg(

x2

i)

 

 

i

6; x

0,195;

 

 

 

 

 

 

 

 

 

 

 

 

 

1, 25 10 6

 

 

 

 

x

 

z

 

 

 

 

 

z

 

 

 

 

 

 

 

 

 

 

 

 

f

 

sin(2d )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

ln(

d

)

e

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

4

p

2,6 t

cos(

 

y

 

)

t

6; y

1, 254;

 

 

 

 

 

 

 

 

(0,003x

y)

x

0,15 10

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qsin t cost

 

 

10 e 0,1 p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

 

 

 

t

 

0,1 t

 

 

 

 

 

 

 

 

5 w

 

 

(a

 

b)2

 

 

 

 

10 6

 

tgx

 

 

 

 

b

40; x 1,055;

 

 

 

 

 

(x

1)

 

 

 

a

5 10

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v

 

 

 

 

w

ab

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

100

 

 

 

 

 

 

 

 

e 0,2b

 

 

 

 

 

 

 

 

 

 

 

 

 

(0,02

v2

2,1x)

 

 

 

 

 

 

 

 

6

t

1

 

 

 

14a

 

 

 

 

 

 

 

 

 

 

y

0,956;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 10 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u

 

 

 

 

(t

 

 

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(t 3

 

 

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

 

 

 

ln((

2u

)

 

 

 

 

 

 

e

u

 

 

 

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

(1, 05

 

 

 

u)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cos(m)

 

 

 

 

x

1, 24; m

6;

 

 

 

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

y

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18z

0, 05 10 5

 

 

 

 

sin(0, 9m)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z

 

w

 

 

 

 

0, 4 y

 

 

2e 0,2 y m

 

 

 

 

 

 

 

 

 

 

 

 

8

s

0, 4

 

 

x3

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

tgy

x

0,911; j

12;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( jx j2 )

y

5 10 6

 

 

 

s5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

arctg s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u

 

 

 

 

 

 

 

e t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1

 

 

 

x )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

40