Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Басков Н.Н., Лебединская А.Р. Visual Basic for Applications. Учебный практикум - файл 1.doc


Басков Н.Н., Лебединская А.Р. Visual Basic for Applications. Учебный практикум
скачать (808.5 kb.)

Доступные файлы (1):

1.doc809kb.16.12.2011 09:21скачать

1.doc

1   2   3   4   5   6   7   8   9

1.4. Операции


Основные арифметические операции в порядке убывания их приоритета:

( ) – круглые скобки; ^ – возведение в степень; - – операция изменения знака; * – умножение; / – деление; + – сложение; - – вычитание.

Существуют также следующие операции: \ – деление с усечением и MOD – вычисление остатка от деления, например, результат операции 19 MOD 5 будет равен числу 4.
Операции сравнения:

 – больше; < – меньше; >= – больше или равно; <= – меньше или равно; = – равно; <> – не равно.
Логические операции:

1. Логическое отрицание (Not) меняет значение логического выражения на противоположное значение.

2. Логическое И (And); формат записи

УСЛОВИЕ_1 And УСЛОВИЕ_2 [And УСЛОВИЕ_3]...

Результат истинен тогда и только тогда, когда истинно каждое условие.

3. Логическое ИЛИ (Or); формат записи

^ УСЛОВИЕ_1 Or УСЛОВИЕ_2 [Or УСЛОВИЕ_3]...

Результат истинен тогда, когда истинно хотя бы одно условие.

4. Операция исключающее ИЛИ Xor дает истинный результат тогда и только тогда, когда истинно только одно из условий.

5. Операция логической эквивалентности Eqv, дает истинный результат, когда оба условия истинны или ложны.

6. Операция логической импликации Imp дает ложный результат, когда первое условие истинно, а второе – ложно, в остальных случаях результат истинен.
Логическое условие – это сравнение двух величин с использованием операций сравнения, имеющее следующий формат:

^ ВЫРАЖЕНИЕ_1 ОПЕРАЦИЯ_СРАВНЕНИЯ ВЫРАЖЕНИЕ_2

где ВЫРАЖЕНИЕ_1 и ВЫРАЖЕНИЕ_2 – арифметические или строковые выражения одного и того же типа, например, А > (В + C) или “Тагир” > “Эрик”.

^

1.5. Ввод и вывод данных


Для ввода и вывода данных на экран дисплея используются следующие стандартные окна диалога:

1. InputBox – вывод на экран окна приглашения к вводу информации и возвращение ввода пользователя; можно изменять только текст в титульной строке, приглашение к вводу, значение по умолчанию, позицию диалога и включать или нет кнопку Help

Общий формат:

InputBox ("строка_сообщение"[, "заголовок_окна"] [, "текст_по_умолчанию"] [, Хпоз] [, Yпоз] [, "файл_подсказки", "контекст"] ),

где "текст_по_умолчанию" – строка в текстовом блоке (может быть пустой); Хпоз, Yпоз – координаты левого верхнего угла окна.

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

pwd=InputBox("Введите пароль:", "Регистрация").

2. MsgBox – отрывает окно сообщения и возвращает значение, указывающее командную кнопку, которую щелкнул пользователь; используется для получения от пользователя ответа ДА/НЕТ и для вывода кратких сообщений (ошибки, предупреждения).

Общий формат:

MsgBox ("строка_сообщение" [, "кнопки"] [, заголовок_окна] [, "файл_подсказки", "контекст"]),

где "кнопки" – число, являющееся суммой кодов типов кнопок; некоторые из кодов кнопок: 0 – ОК, 1 – ОК и ОТМЕНА, 2 – ПРЕКРАТИТЬ, ПОВТОРИТЬ и ОТМЕНА, 3 – ДА, НЕТ и ОТМЕНА, 4 – ДА и НЕТ, 5 – ПОВТОРИТЬ и ОТМЕНА.

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

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

MsgBox( "Это сообщение VB", "Приложение VB").
При определенных условиях может использоваться функция PRINT, которая, в частности, может выводит данные на поле формы и имеет следующий синтаксис:

Print [ВЫРАЖЕНИЕ] [ ; | , ВЫРАЖЕНИЕ]...

где ВЫРАЖЕНИЕ – арифметическое или строковое выражение, значение которого выводится на экран; строковое выражение должно содержаться в кавычках; ; | , – устанавливает начало последующего вывода: если присутствует точка с запятой, то значение очередного выражения следует непосредственно за значением предыдущего, если же присутствует запятая, то значение очередного выражения размещается в начале следующей области вывода (область вывода – это блок из 14 символов); если в конце Print-выражения нет ни точки с запятой, ни запятой, то выполняется перевод строки и вывод следующего значения начинается с новой строки. При выводе чисел всегда резервируется одна позиция для знака числа.

Данная функция может использоваться совместно с такими функциями, как Spc(Kol) - вывод указанного количества пробелов (Kol); Tab(Col) – указывает позицию (Сol) вывода.

Пример: Print “Переменная k = ”; k

если переменная k предварительно получила значение 5 (k = 5), то в результате выполнения оператора Print на экране появится сообщение: Переменная k = 5.
Для обработки ввода с клавиатуры используются события KeyDown, KeyPress и KeyUp. При нажатии клавиши для активного элемента управления генерируются соответствующие события.

В качестве параметра процедуре обработки события KeyPress передается переменная KeyASCII, содержащая ANSI-код нажатой клавиши.

Private Sub Text1_KeyPress(KeyASCII As Integer)

MsgBox KeyASCII

End Sub

В примере код нажатой клавиши выводится в окне сообщений, если фокус принадлежит элементу управления с именем Text1. Значение переменной KeyASCII можно не только считывать, но и устанавливать: KeyASCII = Asc(Chr(KeyASCII)). В этом примере с помощью стандартных функций обработки строк (см. соответствующий раздел) все вводимые с клавиатуры символы преобразуются в прописные.

Событие KeyPress вызывается только при нажатии клавиш, имеющих ANSI-код. Для клавиш управления курсором и для функциональных используются события KeyUp и KeyDown. При этом в переменной KeyCode содержится клавиатурный код нажатой клавиши, а в переменной Shift - состояние клавиш Shift, Ctrl и Alt: 1 при нажатии Shift, 2 при нажатии Ctrl, 3 при нажатии Alt. Значения кодов отдельных клавиш можно просмотреть в каталоге объектов (KeyCodeConstans).
Для анализа действий мышью используются следующие события: Click - одинарный щелчок мыши, DblClick - двойной щелчок и др. Эти события можно также вызывать программно, изменяя для этого свойство Value.
^

1.6. Управляющие операторы


Условный оператор:

If УСЛОВИЕ Then ОПЕРАТОР

где ОПЕРАТОР – любой оператор, который выполняется только в том случае, когда выражение УСЛОВИЕ имеет значение ИСТИНА, иначе данный оператор пропускается; затем, в обоих случаях, выполняется оператор, следующий за условным оператором; например,

If X > 3 Then Y = Y + 1

A = Y * (B + C)

Оператор условного перехода:

If УСЛОВИЕ Then

^ ОПЕРАТОР 1-1

...

[ОПЕРАТОР 1-n ]

[ Else

ОПЕРАТОР 2-1

...

[ОПЕРАТОР 2-m ] ]

End If

данный оператор состоит из Then-ветви с операторами 1-1...1-n и из Else-ветви, которая содержит операторы 2-1...2-m. Если условие, заданное в операторе If истинно, то выполняется Then-ветвь. В противном случае, выполняются операторы Else-ветви. После выполнения одной из ветвей работа программы продолжается с оператора, следующего за End If (если ход выполнения программы не изменяется оператором GoTo). Если отсутствует Else-ветвь и условие в операторе If ложно, то работа программы всегда начинается с оператора, следующего за End If.

Примеры:

1) If X > 3 Then

Y = 1

X = X + 1

End If

2) If Y = 1 Then

Z = X

Else

Z = X - 1

End If

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

If УСЛОВИЕ Then

ОПЕРАТОР(Ы)

Else If УСЛОВИЕ Then

ОПЕРАТОР(Ы)

Else

ОПЕРАТОР(Ы)

End If
Оператор безусловного перехода GoTo:

GoTo МЕТКА_ПЕРЕХОДА

МЕТКА_ПЕРЕХОДА – объявленная в программе метка; метка объявляется произвольным именем, заканчивающимся двоеточием, например,

GoTo M1

X = 1…..‘ оператор пропускается

М1: X = 2.
Оператор цикла While:

While УСЛОВИЕ

ОПЕРАТОР_1

...

[ОПЕРАТОР_n]

Wend

До тех пор, пока условие соблюдается, выполняются шаги цикла, каждый из которых состоит в выполнении операторов от 1-го до n-го (тело цикла). Среди выполняемых операторов должен находиться хотя бы один, который изменяет значение переменной, входящей в условие заголовка цикла (While УСЛОВИЕ), иначе цикл будет бесконечным. При нарушении условия в заголовке цикла выполняется оператор, следующий за Wend. Пример:

I = 1: x = 0

While i < 11 ‘ Определение суммы 10-ти чисел от 1до 10

x = x + 1

i = i + 1 ‘ Изменение значения переменной в заголовке цикла

Wend
Оператор цикла Do:

1) вариант 1

Do

ОПЕРАТОРЫ

[Exit Do]

Loop While | Until УСЛОВИЕ

2) вариант 2

Do While | Until УСЛОВИЕ

ОПЕРАТОРЫ

[Exit Do]

Loop

где While | Until – способ проверки условия выполнения цикла; при использовании While цикл выполняется, пока условие соблюдается; при использо­вании Until цикл выполняется, пока условие не соблюдается; Exit Do – преждевременное прерывание цикла; управление данному оператору должно передаваться при выполнении определенного условия, проверяемого одним или несколькими операторами тела цикл. После завершения цикла или при преждевременном его прерывании работа продолжается с оператора, следующего после Loop.

В обоих вариантах среди операторов тела цикла должен находиться хотя бы один, который изменяет значение переменной, входящей в условие цикла While | Until УСЛОВИЕ (также как в операторе цикла While).
Оператор цикла For:

For СЧЕТЧИК = НАЧАЛЬНОЕ_ЗНАЧЕНИЕ To КОНЕЧНОЕ_ЗНАЧЕНИЕ [Step ШАГ]

ОПЕРАТОР_1

...

[ОПЕРАТОР_n]

[Exit For]

Next СЧЕТЧИК

где СЧЕТЧИК – арифметическая переменная, которая изменяется при повторении цикла (управляющая переменная цикла); НАЧАЛЬНОЕ_ЗНАЧЕНИЕ – арифметическое выражение, задающее начальное значение счетчика; КОНЕЧНОЕ_ЗНАЧЕНИЕ – арифметическое выражение, задающее конечное значение счетчика; ШАГ – арифметическое выражение, задающее приращение значения счетчика после каждого шага цикла (по умолчанию это +1); Exit For – прерывание выполнения цикла (см. пояснение к Exit Do оператора цикла Do). Работа продолжается с оператора, следующего за Next. Пример:

x = 0

For i = 1 To 10 Step 1

x = x + 1

Next i
Оператор выбора (переключатель) Select Case:

Select Case ПЕРЕМЕННАЯ

Case СРАВНЕНИЕ_1

ОПЕРАТОРЫ_1

[ Case СРАВНЕНИЕ_2

^ ОПЕРАТОРЫ_2 ]

...

[ Case Else

ОПЕРАТОРЫ ]

End Select

Перед выполнением переключателя ПЕРЕМЕННАЯ в его заголовке должна получить от предшествующих операторов определенное значение. Сначала выполняется СРАВНЕНИЕ_1, если результат истинен, выполняются ОПЕРАТОРЫ_1, после чего программа выполняется с оператора, следующего за End Select. Если результат СРАВНЕНИЯ_1 ложен, то выполняется СРАВНЕНИЕ_2 и т.д. Если ни для одной Case-ветви результат сравнения не оказался истинным, выполняются операторы ветви Case Else (если в данной ситуации этой ветви нет, то будет выдана ошибка). Допускается использование вложенных операторов Select Case.

1.7. Массивы


Массив – это совокупность нескольких переменных одного типа, которые могут принимать одинаковые или различные значения. Различают статические и динамические массивы. Границы статических массивов устанавливаются на этапе разработки и могут изменяться только в новой версии программы. Динамические массивы изменяют свои границы в ходе выполнения программы.

Статические массивы нельзя объявить локально внутри процедуры, а только глобально или для контейнера (Form, Module, Class).

В общем случае индексирование элементов начинается с нуля, однако, использование оператора Option Base 1 позволяет установить индексацию с 1. Данный оператор указывается в секции (General)(Declarations) контейнера. Границы индексации можно установить в опции РАЗМЕРНОСТЬ (см. ниже).

Шаблон объявления массивов:

Static | Public | Dim [Shared] ПЕРЕМЕННАЯ [РАЗМЕРНОСТЬ]

где РАЗМЕРНОСТЬ – указывает диапазон изменения индекса массива, такой индекс является переменной величиной и используется для указания конкретного элемента массива; РАЗМЕРНОСТЬ имеет следующий вид m To n, где m – начальное значение индекса, n – конечное значение индекса; если при обработке массива значение индекса выходит из указанного в объявлении диапазона, выдается сообщение об ошибке. В данном параметре можно через запятую указать диапазон изменения для нескольких индексов (многомерные массивы). Примеры:

Dim a$(1To 20) – массив из 20-ти строковых элементов: а$(1) – 1-й элемент, a$(2) – 2-й элемент и т. д;

Dim p%(5 To 10) – массив из 6-ти целых элементов: p%(5) – 1-й элемент, р%(6) – 2-й элемент и т.д.;

Dim x(10) As Single – массив из 11вещественных чисел х(0) – й элемент, х(1) – 2-й элемент, …, х(10) – 11-й элемент.

Если определить переменную-индекс как Dim i As Integer, то можно обратиться к любому элементу массива (предварительно задавая конкретное значение для i), например х(i) – это i-й элемент массива х. С учетом вышесделанного определения этого массива x(n) индекс i может изменяться в диапазоне от 1 до n и при i = 1 ‘это будет 1-й элемент массива.

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

Dim c(5) As Integer

Dim s(5) As String

Dim X(2) As Variant

c( ) =... 'заполнение данными первых двух массивов

s( ) =…

X(1) = c() 'заполнение массива X другими массивами

X(2) = s()
Массивы могут быть многомерными: например, двумерный массив Dim m(5, 10).

Массивы могут быть динамическими, т. е. их размеры могут меняться в любое время. Для создания динамического массива надо: 1) объявить массив оператором Public или Dim, или Static с пустой размерностью в секции (General)(Declarations) контейнера, например Dim D() As Variant; 2) оператором ReDim распределить фактическое количество элементов ReDim D(100) [As ТИП]; этот оператор может появляться только в процедурах; он может изменять нижний и верхний пределы размерностей, но не изменяет количества размерностей.

Для изменения размерности без потери содержимого используется ReDim Preserve, но в многомерных массивах это допускается только для последнего измерения, а при наличии верхней и нижней границы – только для верхней.

Начиная с Visual Basic 6.0, можно присвоить содержимое одного массива В другому С так же как для обычных переменных: С = В. При следует учитывать, что могут появиться ошибки из-за несоответствия типов, размерности или количества измерений статических массивов. В то же время для динамических массивов указанная операция, как правило, проходит успешно.

Пределы динамического массива могут также устанавливаться с помощью переменных ReDim B(X,Y).
^

1.8. Примеры программ работы с числами


Rem Программа_2.1 – определение наибольшего из n чисел

Sub Main()

Dim i As Integer

Dim n As Integer ‘ количество чисел

Dim x As Single, max As Single ‘ очередное число и наибольшее из всех указанных чисел

max = 0

n = InputBox ( "Введите количество чисел")

For i = 1 To n

x = InputBox ("Введите" & Str(i) & "-е число" ‘Str – функция преобразования числа в строку

If x > max Or i = 1 Then max = x

Next i

MsgBox "max = " & Str(max)

End Sub
Rem Программа_2.2 – сортировка массива чисел методом ‘’пузырька”

Sub Main()

Dim T(5) As Single, X As Single

Dim i As Integer, OSTANOV As Integer

For i = 1 To 5

T(i) = InputBox ("Введите " & Str(i) & "-е число")

Next i

M: OSTANOV = 1 ‘ переменная, принимающая значение 0, если есть перестановка чисел

For i = 1 To 4

If T(i) > T(i + 1) Then

X = T(i + 1): T(i + 1) = T(i): T(i) = X ‘ два числа меняются местами

^ OSTANOV = 0

End If

Next I

If OSTANOV = 0 Then GoTo M

MsgBox “Результат: ” & Str(T(1)) & “ “ & Str(T(2)) & “ “ & Str(T(3)) & “ “ & Str(T(4)) & “ “ & _

Str(T(5))

End Sub
^

1.9. Обработка строк. Примеры


Функция Len(СТРОКА) выдает длину строки – количество символов в строковом выражении, являющемся аргументом функции.

Функция Chr() преобразует ASCII-код в соответствующий символ; аргумент является целым числом из диапазона от 0 до 255.

Функция Asc() выдает ASCII-код символа, указанного в качестве аргумента (он должен быть в кавычках), либо код первого символа строки.

Функция Chr() возвращает символ, соответствующий указанному ANSI-коду; аргумент может быть целым числом от 0 до 255.

Выделение крайних слева символов строки Left(СТРОКА, ЧИСЛО), ЧИСЛО –это аргумент целого типа, задающий количество выделяемых символов из аргумента СТРОКА.

Выделение правых крайних символов Right(СТРОКА, ЧИСЛО).

Выбор подстроки Mid(СТРОКА, НАЧАЛО, ДЛИНА), где СТРОКА – строка, из которой, начиная с позиции НАЧАЛО (номер символа), выбирается количество символов, указанное в параметре ДЛИНА.

Функция Lcase() возвращает заданную строку в виде строчных букв из диапазона от 32 до 127.

Функция Ucase() противоположна предыдущей функции.

Функция Ltrim$() устраняет в строке ведущие пробелы (пробелы перед первым непробельным символом).

Функция Rtrim() убирает в строке последние пробелы.

Trim() удаляет пробелы в начале и в конце строки.

Создание строки из пробелов Space(), аргумент функции – длина строки.

Spc – в операторе Print# и методе Print выводит указанное число пробелов.

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

Функция Str() представляет числовой аргумент как символьную строку.

Rem Программа_2.3 – сортировка слов методом "пузырька"

Sub Main()

Dim I As Integer, OSTANOV As Integer

Dim T(5) As String, X As String

For I = 1 To 5

T(I) = InputBox ("Введите " & Str(I) & "-е слово ")

Next I

^ M: OSTANOV = 1

For I = 1 To 4

If T(I) > T(I + 1) Then

X = T(i + 1): T(i + 1) = T(i): T(i) = X

OSTANOV = 0

End If

Next I

If OSTANOV = 0 Then GoTo M

MsgBox “Результат сортировки 5-ти слов: ” & T(1) & “ “ & T(2) & “ ” & T(3) & “ “ & T(4) & _

“ “ & T(5)

End Sub
^

1.10. Математические вычисления. Другие операторы и функции


Абсолютное значение заданного арифметического выражения: Abs().

Тригонометрические функции:

Sin(УГОЛ), Cos(УГОЛ), Tan(УГОЛ), Atn(АРИФМ.ВЫРАЖ);

где аргумент УГОЛ задается в радианах; функция арктангенса возвращает значение угла в радианах; для преобразования из градусной меры в радианную и обратно используются формулы: град=рад*(180/pi) и рад=град*(pi/180) при pi=3.14159.

Вычисление экспоненты: Exp() – вычисление значения е в степени х (антилогарифм), где е=2.71; результат имеет тип Single.

Вычисление натурального логарифма: Log(), т.е. ln x при основании е; результат имеет тип Single.

Преобразование к целому типу: ^ Int() – наибольшее целое, не превосходящее значения аргумента.

Выделение целой части арифметического значения аргумента: Fix().

Извлечение квадратного корня Sqr(); результат имеет тип Single.

Определение знака числа ^ Sgn(); возвращает -1, 0, +1, если аргумент соответственно меньше, равен или больше нуля.

Преобразование числа в строку Str().

Преобразование строки в число: Val().

Определение или изменение текущей системной даты ^ Date: dat$=Date – определение; Date="09-09-1945" – изменение.

Определение или изменение системного времени Time.

Rnd(n) возвращает случайное число в диапазоне от 0 до 1; при n < 0 – определенное число, зависящее от n, при n > 0 – новое число, при n = 0 – последнее выданное число.
^

1.11. Процедуры и функции. Примеры


В языке Basic процедуры и функции объединяются под общим названием подпрограммы.

Для создания процедуры в программе надо ввести в окне редактирования кода заголовок Sub ИМЯ_ПРОЦЕДУРЫ, появится пустой шаблон процедуры:

^ Sub ИМЯ_ПРОЦЕДУРЫ

End Sub

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

Для выбора существующих процедур в окне редактирования кода надо выбрать "(General)" из списка Object и выбрать процедуру в окне Procedure.

Для просмотра процедуры в другом модуле надо: 1) выбрать View / Object Browser, 2) в окне Project / Library выбрать проект, 3) выбрать модуль из списка Classes и процедуру из списка Members, 4) выбрать View Definition.

Способы вызова процедуры: Call Proc1(arg1, arg2), или Proc1 arg1, arg2.

Процедуры Public в других модулях могут вызываться отовсюду в проекте; возможно, потребуется специфицировать модуль, который содержит вызываемую процедуру – это зависит от вида модуля:

1. Все вызовы снаружи модуля формы должны указывать на модуль формы, содержащий процедуру: имя_модуля.имя_процедуры();

2. При вызове процедуры из модуля класса также должен указываться экземпляр класса, но в отличие от формы экземпляр класса предварительно должен быть объявлен как объектная переменная, например Dim DemClass As New Class1, тогда обращение будет иметь вид DemClass.Sub1.

Параметры пользовательских процедур по умолчанию имеют тип Variant.

При передаче параметров по значению используется ключевое слово By Val; фактически, передается только копия переменной и процедура не изменяет оригинальную переменную. Пример:

Sub CC(By Val x As Integer)

....

End Sub

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

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

Примеры процедур:

1. Передача параметра из процедуры

Rem Программа_2.4 – Передача параметра из процедуры с помощью переменной s

Sub Main()

Dim s As Single, x As Single, y As Single

x = 5: y = 15

Call sumir (x, y, s) ‘ вызов процедуры суммирования

MsgBox "s = " & Str(s)

End Sub
Sub sumir (x!, y!, s!) ‘ определение процедуры суммирования двух чисел

s! = x! + y! ‘ в переменную s помещается сумма двух чисел

End Sub
2. Массив, как параметр процедуры

Rem Программа_2.5 – Массив, как параметр процедуры

Sub Main()

Dim n As Integer

Dim s As Single

Dim x(2) As Single

n = 2

x(1) = 5: x(2) = 15: s = 0

Call sumir(x(), n, s) ‘ вызов процедуры суммирования элементов массива

MsgBox "s = " & Str(s)

End Sub
Sub sumir (x() As Single, n As Integer, s As Single)

Dim i As Integer

For i = 1 To n

s = s + x(i)

Next i

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

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

Function ИМЯ_ФУНКЦИИ

End Function

В пространство между именем функции и ключевыми словами End Function вносятся необходимые операторы.

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

Общий синтаксис определения функции:

Function ИМЯ_ФУНКЦИИ(ПАРАМЕТР_1[, ПАРАМЕТР_2]...) [Static]

ОПЕРАТОР_1

[ОПЕРАТОР_2]

...

^ ИМЯ_ФУНКЦИИ = ВЫРАЖЕНИЕ

End Function

где ПАРАМЕТР – элемент данных, передаваемый функции при ее вызове; Static – при наличии в объявлении функции данного ключевого слова локальные переменные, объявленные в теле функции, сохраняют свои значения в промежутках между вызовами этой функции.

Способы вызова функций: X = fun1(Y), или Call fun1 Y.

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

Каждая функция всегда возвращает только одно значение.

Примеры функций:

1. Передача параметра из функции

Rem Программа_2.6 – Передача параметра из функции

Sub Main()

Dim x As Single, y As Single, s As Single

x = 5: y = 15

s = sumir(x, y) ‘ вызов функции суммирования двух чисел

MsgBox "s = " & Str(s)

End Sub
Function sumir! (x!, y!) ‘ определение функции суммирования двух чисел

sumir! = x! + y!

End Function
2. Пример функции, возвращающей строковое (символьное) значение

Rem Пример_2.7 – Использование Функции, возвращающей строковое значение

Sub Main()

Dim sl As String

sl = "БЫЛО"

MsgBox sl

sl = fun$(sl) ’ функция меняет для переменной sl значение ‘’БЫЛО “ на значение “СТАЛО”

MsgBox sl

End Sub
Function fun$ (sl As String)

sl = "СТАЛО"

fun$ = sl ‘Этим оператором функция возвращает значение – отличие от Sub

End Function

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

Для того чтобы какая-либо переменная из главной программы была доступна функциям и процедурам без передачи ее в качестве параметра, она должна быть объявлена в главной программе с ключевым словом Shared.

Переменные типа Private доступны всем процедурам модуля, переменные Public доступны другим модулям; как и все переменные уровня модуля, они объявляются в начале модуля.

Переменные уровня процедуры объявляются в операторах Dim и Static; первые существуют только во время выполнения процедуры, а вторые – в течение всего времени выполнения приложения. Если поместить перед именем процедуры Static, то все ее локальные переменные будут статическими.

Переменная в модуле не может иметь то же имя, что и процедура или тип, которые определены в этом же модуле.

Если переменные Public в различных модулях имеют одно имя. то для их различения надо квалифицировать имена именем модуля. Например, если в модулях М1 и М2 имеются переменные intX, то обращение к этим переменным должно иметь следующий вид: М1.intX и М2.intX.
^

1.12. Работа с файлами


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

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

Реализуются три типа доступа к файлам: 1) последовательный (Sequential) – для чтения и записи текстовых файлов, 2) произвольный (Random) – для чтения и записи текста или структурированных двоичных файлов с записями фиксированной длины, 3) двоичный (Binary) – для чтения и записи произвольно структурированных файлов.

Для открытия файла с последовательным доступом используется команда

Open ИМЯ_ФАЙЛА For РЕЖИМ_РАБОТЫ As #НОМЕР_ФАЙЛА,

где – ИМЯ_ФАЙЛА – имя с расширением и маршрутом (полным путем); режимы работы: 1) Append: – файл открывается для помещения в него записей, если он уже содержит какие то записи, то новые помещаются в конец файла; 2) Input – файл открывается для чтения из него записей; 3) Output: – файл открывается для помещения в него записей; НОМЕР_ФАЙЛА – целое число между 1 и 255, предварительно определяемое с помощью функции FreeFile; обращение к файлу из программы выполняется под этим номером.

После того, как файл обработан, его закрывают командой Close #НОМЕР_ФАЙЛА.

Доступ к файлу возможен между командами Open и Close.

Для помещения записи в файл используется команда

Print #НОМЕР_ФАЙЛА, ПЕРЕМЕННАЯ [, ПЕРЕМЕННАЯ ]...

Для чтения записи из файла используются следующие команды:

1) чтение одной строки:

Line Input #НОМЕР_ФАЙЛА, str_Переменная

2) чтение всего файла в строковую переменную (strText):

strText = Input$ (LOF(НОМЕР_ФАЙЛА), НОМЕР_ФАЙЛА),

где LOF() – функция определения длины файла в байтах;

3) чтение последовательности определенного количества символов:

Input #НОМЕР_ФАЙЛА, ПОЛЕ_ДАННЫХ_1 [, ПОЛЕ_ДАННЫХ_2]...

Функция EOF(#НОМЕР_ФАЙЛА) возвращает логическое значение ИСТИНА (1), если достигнуто окончание файла, и значение ЛОЖЬ (0) – в противном случае.

Открытие файла для произвольного доступа осуществляется командой

Open ИМЯ_ФАЙЛА For Random [ Acces ДОСТУП ] As #НОМЕР_ФАЙЛА [Len = ДЛИНА_ЗАПИСИ],

где параметр Acces задает режим доступа к файлу: Read - чтение, Write - запись, Read Write - чтение и запись (без указания параметра также чтение и запись).

Для записи используется команда

Put #НОМЕР_ФАЙЛА, НОМЕР_ЗАПИСИ, ПЕРЕМЕННАЯ

для считывания команда

Get #НОМЕР_ФАЙЛА, НОМЕР_ЗАПИСИ, ПЕРЕМЕННАЯ

Открытие файла для двоичного доступа осуществляется командой

Open ИМЯ_ФАЙЛА For Binary [ Acces ДОСТУП ] As #НОМЕР_ФАЙЛА,

длина записи не указывается, т. к. обмен происходит побайтно; для ввода и вывода используются те же операторы Get и Put, но вместо номера записи указывается номер байта.
^

2. Основы VBA


Предназначение VBA.

    • Действия в VBA осуществляются в результате выполнения кода VBA.

    • Вы создаете (или записываете) программу VBA, которая сохраняется в модуле VBA.

    • Модуль VBA состоит из процедур.

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

Sub Test()

Sum = 1 + 1

MsgBox "Ответ: " & Sum

End Sub

    • Кроме процедур Sub, в модуле VBA может использоваться второй тип процедур — функции.

Процедура функции возвращает одно значение (или массив). Функция может быть вызвана из другой процедуры VBA или использоваться в формуле рабочего листа. Далее приведен пример функции с названием AddTwo:

Function AddTwo(argl, arg2}

AddTwo = argl + arg2

End Function

    • VBA управляет объектами, которые представлены запускающим приложением (в .данном случае Excel).

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

    • Классы объектов организованы в иерархическую структуру.

Объекты могут быть контейнерами для других объектов. Например, Excel — это объект под названием Application , он содержит другие объекты, например, Workbook (Рабочая книга). Объект Workbook может состоять из других объектов, например, Worksheet (Рабочий лист) и C h a r t (Диаграмма). Объект Worksheet также содержит объекты, например. Range (Диапазон), Pivot Table (Сводная таблица) и т.д.

Организацию таких объектов называют объектной моделью Excel.

    • Одинаковые объекты формируют коллекцию.

Например, коллекция Worksheets состоит из всех рабочих листов конкретной рабочей книги, а коллекция CommandBars — из всех объектов CommandBar. Коллекции — это объекты в себе.

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

Например, на рабочую книгу с названием Книга1 . х 1 в можно сослаться следующим образом:

Application.Workbooks("KHMral.xls")

Это ссылка на рабочую книгу KHMral.xls в коллекции Workbooks. Коллекция Workbooks находится в объекте Application. Переходя на следующий уровень, вы можете сослаться на лист Лист1 в книге Книга1.xls: Application.Workbooks("Книга1.xls").Worksheets ("Jbtcrl")

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

Application.Workbooks("KHMral.xls").Worksheets("Лист1").Range("Al")

    • При опущенной ссылке на объект Excel по умолчанию используются активные объекты.

Если книга Лист1 — активная рабочая книга, то предыдущую ссылку можно упростить:

Worksheets("Лист!").Range("Al")

Если вы знаете, что лист Лист 1 — активный, то ссылку можно упростить еще больше:

Range("А1")

Объекты имеют свойства.

Свойство можно считать параметром или настройкой объекта. Например, объект диапазона имеет такие свойства, как ^ Value (Значение) и Name (Имя), Объект диаграммы обладает такими свойствами, как H a s T i t l e (Заголовок) и Туре (Тип). Вы вправе использовать VBA, чтобы задать свойства объектов и их изменить.

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

Например, вы можете сослаться на значение в ячейке А1 листа Лист1 следующим образом:

Worksheets ("Лист!").Range ("Al").Value

^

3. Практические задания

3.1. Практическое задание №1. Знакомство с VBA


Для запуска VBA откройте приложение MS Excel и выполните команду Сервис МакросРедактор Visual Basic или нажать сочетание клавиш <Alt+F11>.

На экране монитора появиться редактор Visual Basic (см рис1).



Рис 1. Окно редактора Visual Basic
Рассмотрим основные элементы окна редактора Visual Basic.

^ Строка меню.

Строка меню VBE, естественно, работает, как и строка меню любого другого приложения. Она содержит команды, используемые для управления различными компонентами VBА. Кроме того, для выполнения многих команд меню используются комбинации клавиш. Например, для команды ViewImmediate Window (ВидОкно отладки) применяется комбинация клавиш <Ctrl+G>.

^ Панели инструментов

Стандартная панель инструментов Standard, которая по умолчанию находится под строкой меню, — это одна из шести панелей инструментов, используемых в VBA (строка меню тоже считается панелью инструментов). Панели инструментов VBE работают, как и в Excel: вы можете задавать специальные настройки для панелей инструментов, перемещать их, отображать другие панели инструментов и т.д. Для управления панелями инструментов VBA используется команда ViewToolbarsCustomize (ВидПанели инструментовНастройка).

^ Окно Project Explorer

В окне Project Explorer отображается диаграмма-дерево, состоящая из всех открытых в данный момент в Excel рабочих книг (включая дополнительные элементы и скрытые рабочие книги). Каждая рабочая книга известна как проект.

Окно кода

Окно кода (которое иногда называют Module) содержит код VBA. Для каждого элемента проекта представлено собственное окно кода. Чтобы просмотреть код объекта, дважды щелкните мышью на этом объекте в окне Project Explorer. Например, чтобы просмотреть код объекта Лист1, дважды щелкните на элементе Лист1 в окне Project Explorer. Если вы не создавали для него VBА-код, это открывшееся окно будет пустым.

Существует еще один способ просмотреть код объекта — выделите этот объект в окне Project Explorer, а затем щелкните на кнопке View Code (Просмотр кода) на панели инструментов вверху окна Project Explorer.

^ Окно Immediate

Окно Immediate предназначено для непосредственного выполнения операторов VBA, тестирования операторов и отладки кода. Это окно может отображаться и скрываться. Если окно Immediate в данный момент не отображается на экране, нажмите <Ctrl+G>. Чтобы закрыть окно Immediate, щелкните на кнопке закрытия в его строке заголовка (или щелкните правой кнопкой мыши в любом месте окна и выберите Hide из контекстного меню).
^ Добавление элементов VBA
Редактор VBA работает со следующими объектами:

    • Procedure

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



Рис 2. Добавление процедуры
Для добавления Процедуры используется команда InsertProcedure…

    • UserForm

Добавление пользовательской формы осуществляется при помощи команды Insert UserForm

    • ^ Module

Чтобы добавить в проект новый модуль VBA, выделите название проекта в окне Project Explorer и выберите команду InsertModule (ВставкаМодуль). Также можно щелкнуть правой кнопкой мыши на названии проекта и выбрать команду InsertModule в контекстном меню.

    • ^ Class Module


Работа с окнами кода
Каждому объекту в проекте соответствует свое окно кода. Такими объектами могут быть:

• сама рабочая книга (ЭтаКнига в окне Project Explorer);

• рабочий лист или лист диаграмм рабочей книги (например, Лист1 или Диаграмма1 в окне Project);

• модуль VBA;

• модуль класса (специальный тип модуля, позволяющий создавать новые классы объектов);

• форма UserForm.

^

3.2. Практическое задание №2. Линейное программирование


Задание.


Найти значение функции: при любом заданном х


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

Алгоритм, составленный для некоторого исполнителя, можно представить раз­личными способами: с помощью графического или словесного описания, в виде таблицы, последовательностью формул, записанным на алгоритмическом языке (языке программирования). Остановимся на графическом описании алгоритма, называемом блок-схемой. Этот способ имеет ряд преимуществ благодаря наглядно­сти, обеспечивающей, в частности, высокую «читаемость» алгоритма и явное отображение управления в нем.

Прежде всего определим понятие блок-схемы. Блок-схема - это ориентирован­ный граф, указывающий порядок исполнения команд алгоритма.

Основные элементы языка блок-схем

Элемент

Описание




Начало или конец алгоритма




Выполнение операций, изменяющих команды (группы команд)




Ввод - вывод данных



Условный переход
1   2   3   4   5   6   7   8   9



Скачать файл (808.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации