Методичка для Д в 1 семестре
.pdfВыполнение инженерных расчетов с использованием типовых алгоритмов средствами VBA.
Введение
Название BASIC представляет собой аббревиатуру от Beginner's Allpurpose Symbolic Instruction Code – универсальный язык символического коди- рования для начинающих. BASIC был разработан в середине 1960-х годов со- трудниками Дартмутского колледжа по руководством Дж. Кемени и Т. Куртца. В последующем BASIC неоднократно подвергался расширениям и модифика- циям.
Язык Visual Basic (VB) включает в себя средства визуального проектиро- вания и объектно-ориентированного программирования. В языке VB реализо- ван визуальный стиль программирования, позволяющий не столько програм- мировать, сколько проектировать программу (приложение) – сначала создавать рабочую среду, интерфейс, элементы управления (меню, окна диалога, кнопки и т. п.) и только затем записывать требуемые операторы обработки данных.
Язык Visual Basic for Application (VB для приложений -VBA) является со-
временным языком программирования, предназначенным для расширения функциональных возможностей документов, созданных в любом приложении пакета Microsoft Office. Так как инженерные расчеты чаще всего выполняются в программе Microsoft Excel, в курсе информатики для будущих инженеров фа- культета УПП раздел "Основы программирования" включает изучение языка
VBA для Excel.
Методические указания и задание на расчетно-графическую работу со- ставлены при-менительно к учебной программе для студентов очной формы обучения специальности «Организация перевозок и управление на транспорте» (железнодорожном) и являются дополнением к лекционному курсу и учебной литературе.
1
1. Основы программирования на VBA
1.1. Типы данных. Область определения переменных
Тип данных определяет, каким образом биты данных, представляющие конкретное значение, хранятся в памяти ПК. Имеющиеся в VBA основные ти- пы данных представлены в таблице 1:
Таблица 1
Тип данных |
Диапазон значений |
Объем па- |
Значение по |
||
мяти (байт) |
умолчанию |
||||
|
|
|
|||
Byte |
Целые числа |
От 0 до 255 |
1 |
0 |
|
Integer |
" – " |
От -32768 до 32767 |
2 |
0 |
|
Long |
" – " |
От -2 147 483 648 до |
4 |
0 |
|
|
|
2 147 483 647 |
|
|
|
Single |
Вещественные |
От -3,4Е38 до -1,4Е-45 (для |
4 |
0 |
|
|
числа |
отр.) |
|
|
|
|
|
От 1,4Е-45 до 3,4Е38 (для |
|
|
|
|
|
пол.) |
|
|
|
Double |
" – " |
От -1,7Е308 до -4,9Е-324 |
8 |
0 |
|
|
|
(для отр.) |
|
|
|
|
|
От 4,9Е-324 до 1,7Е308 (для |
|
|
|
|
|
пол.) |
|
|
|
Boolean |
Логический |
True или False |
2 |
False |
|
String * n |
Строковый - |
От 1 до 65400 |
n |
"0…0" |
|
(n – дли- |
постоянной |
|
|
(Строка из n |
|
на стро- |
длины |
|
|
невидимых |
|
ки) |
|
|
|
нулей) |
|
String |
Строковый – |
От 0 до ≈2 миллиарда |
10+длина |
"" |
|
|
переменной |
|
строки |
(пустая |
|
|
длины |
|
|
строка) |
|
Date |
Дата и время |
От 1 янв. 100 г. до 31 дек. |
8 |
#12/30/1899# |
|
|
|
9999 г. |
|
|
|
Currensy |
Денежный |
От –922 337 203 685 |
8 |
0 |
|
|
|
477,5808 |
|
|
|
|
|
до 922 337 203 685 477,5807 |
|
|
|
Variant |
Любой |
|
для чисел = |
Empty (Пус- |
|
|
|
|
16; |
то) |
|
|
|
|
для строк = |
|
|
|
|
|
22 + длина |
|
|
|
|
|
строки |
|
2
1.2. Приоритет выполнения операций
VBA выполняет операции в соответствии с их приоритетами, что обеспе- чивает однозначность в трактовании значений выражений.
Таблица 2
Приоритет |
Операция |
1 |
Вызов функции и скобки |
2 |
^ (возведение в степень) |
3 |
- (смена знака) |
4 |
*, / (умножение, деление) |
5 |
\ (целочисленное деление) |
6 |
Mod (остаток от деления) |
7 |
+ , - (сложение, вычитание) |
8 |
& (объединение строк) |
9 |
>, <, >=, <=, <>,= (больше, |
|
меньше, не меньше, не больше, не равно, |
|
равно) |
10 |
Not (логическое отрицание) |
11 |
And (логическое И) |
12 |
Or (логическое Или) |
1.3. Встроенные функции
В VBA имеется большой набор встроенных функций, использование ко- торых существенно упрощает программирование. Эти функции можно разде- лить на следующие основные категории:
∙Математические функции
∙Функции преобразования форматов
∙Функции обработки строк
∙Функции времени и даты Ниже рассмотрены основные функции из этих категорий.
3
Математические функции:
Таблица 3
Функция |
Возвращаемое значение |
|
|
Abs (числ. вы- |
Модуль (абсолютная величина)числа |
ражение) |
|
|
|
Atn (числ. вы- |
Арктангенс |
ражение) |
|
|
|
Cos (числ. выраже- |
Косинус |
ние) |
|
|
|
Ехр (числ. выраже- Экспонента, т. е. результат возведения основания нату- ние) рального логарифма в указанную степень
Log (числ. выраже- Натуральный логарифм
ние)
Rnd (числ. выраже- Случайное число из интервала [0,1).
ние)
Если числ. выражение меньше нуля, то Rnd возвращает каждый раз одно и то же число, используя аргумент в ка- честве опорного числа; если числ. выражение больше нуля или аргумент опущен, то — следующее случайное число в последовательности; если числ. выражение рав- няется нулю, то — случайное число, возвращенное при предыдущем вызове этой функции.
Перед вызовом функции Rnd используйте инструкцию Randomize без аргумента
Sgn (числ. выраже- Знак числа ние)
Sin (числ. выраже- Синус ние)
4
Функция |
|
Возвращаемое значение |
|
|
|
|
|
Sqr (числ. выраже- |
Квадратный корень из числа |
|
|
ние) |
|
|
|
|
|
|
|
Tan (числ. выраже- |
Тангенс |
|
|
ние) |
|
|
|
|
|
|
|
Fix (числ. выраже- |
|
Обе функции, Int и Fix, отбрасывают дробную |
|
ние) и Int (числ. вы- |
часть числа и возвращают целое значение. |
|
|
ражение) |
|
Различие между функциями int и Fix состоит в том, |
|
|
что для отрицательного значения аргумента число функ- |
|
|
|
ция Int возвращает ближайшее отрицательное целое чис- |
|
|
|
ло, меньшее либо равное указанному, a Fix — ближайшее |
|
|
|
отрицательное целое число, большее либо равное указан- |
|
|
|
ному |
|
|
|
|
|
|
Функции преобразования форматов: |
|||
|
|
Таблица 4 |
|
|
|
|
|
Val (строковое вы- |
Возвращает числа, содержащиеся в строке, |
||
ражение) |
как числовое значение соответствующего типа |
|
|
|
|
|
|
Str (числ. выраже- |
Возвращает значение типа variant (String), яв- |
||
ние) |
ляющееся строковым представлением числа |
|
|
|
|
|
|
В качестве допустимого десятичного разделителя функция Str восприни- мает только точку. При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию Cstr, описанную ниже.
Чтобы представить числовое значение как дату, время, денежное значе- ние или в специальном формате, следует использовать функцию Format.
Эта функция возвращает значение типа variant (string), содержащее выра- жение, отформатированное согласно инструкциям, заданным в описании фор- мата.
5
Синтаксис:
Format(<Выражение>[,<Формат>])
Выражение — любое допустимое выражение Формат — любое допустимое именованное или определяемое пользова-
телем выражение формата. Примером именованного формата является Fixed —
формат действительного числа с двумя значащими цифрами после десятичной точки. При построении пользовательского числового формата возможно ис- пользование символов, приведенных в таблице 5
|
Таблица 5 |
|
|
|
|
Символ |
Назначение |
|
|
|
|
|
Резервирует позицию цифрового разряда. Отображает цифру |
|
|
или нуль. Если у числа, представленного аргументом, есть ка- |
|
0 |
кая-нибудь цифра в той позиции разряда, где в строке формата |
|
|
находится 0, функция отображает эту цифру аргумента, если |
|
|
нет — в этой позиции отображается нуль |
|
|
Резервирует позицию цифрового разряда. Отображает цифру |
|
|
или ничего не отображает. Если у числа, представленного аргу- |
|
# |
ментом, есть какая-нибудь цифра в той позиции разряда, где в |
|
строке формата находится #, функция отображает эту цифру ар- |
|
|
|
гумента, если нет — в исходной позиции не отображается ниче- |
|
|
го. Действие данного символа аналогично действию о, за ис- |
|
|
ключением того, что лидирующие нули не отображаются |
|
|
Резервирует позицию десятичного разделителя. Указание точки |
|
. |
в строке формата определяет, сколько разрядов необходимо |
|
|
отображать слева и справа от десятичной точки |
|
|
|
|
% |
Резервирует процентное отображение числа |
|
|
|
|
, |
Разделитель разряда сотен от тысяч |
|
|
|
|
: |
Разделитель часов, минут и секунд в категории форматов Время |
|
(Time) |
|
|
|
|
|
/ |
Разделитель дня, месяца и года в категории форматов Дата |
|
(Date) |
|
|
|
|
|
E+, E-, |
Разделитель мантиссы и порядка в экспоненциальном формате |
|
e+, e- |
|
|
6
Функции обработки строк:
|
Таблица 6 |
|
|
Функция |
Возвращаемое выражение |
|
|
Asc (Строка) |
Возвращает ASCII-код начальной буквы строки. |
|
|
Chr(Код) |
Преобразует ASCII-код в строку. |
|
Например |
|
Chr ( 13 ) — переход на новую строку, |
|
Chr ( 97 ) = "а" |
|
|
Lcase(Строка) |
Преобразует строку к нижнему регистру. |
|
|
Ucase(Строка) |
Преобразует строку к верхнему регистру. |
|
|
Left(Строка, Число сим- |
Возвращает подстроку, состоящую из заданного |
волов) |
числа первых символов исходной строки. |
Right(Строка, Число сим- |
Возвращает строку, состоящую из заданного числа |
волов) |
последних символов исходной строки. |
Mid(Строка, Начальная |
Возвращает подстроку Строки, содержащую ука- |
позиция [,Число симво- |
занное Число символов от Начальной позиции. Если |
лов]) |
Число символов не указано, возвращает все символы |
|
Строки от Начальной позиции. |
Len(Строка) |
Возвращает число символов строки. |
Ltrim(Строка) |
Возвращает копию строки без пробелов в начале. |
Rtrim(Строка) |
Возвращает копию строки без пробелов в конце. |
Trim(Строка) |
Возвращает копию строки без пробелов в начале и в |
|
конце |
Space(Число) |
Возвращает строку, состоящую из указанного Числа |
|
пробелов. |
String(Число, Символ) |
Возвращает строку, состоящую из указанного Числа |
|
повторений одного и того же Символа. |
7
Функции времени и даты:
|
Таблица 7 |
|
|
Функция |
Возвращаемое значение |
|
|
Date |
Возвращает значение типа Variant (Date) , содержащее теку- |
|
щую системную дату |
Time |
Возвращает значение типа Variant (Date) , содержащее теку- |
|
щее время по системным часам компьютера |
Now |
Возвращает значение типа Variant (Date) , содержащее теку- |
|
щую дату и время по системному календарю и часам компь- |
|
ютера |
Hour(время), |
Возвращают значения типа Variant (Integer), содержащее це- |
Minute(время), |
лое число, которое представляет часы, минуты и секунды в |
Second(время) |
значении времени. |
Day(дата), |
Возвращает значение типа Variant (Integer), содержащее це- |
Month(дата), |
лое число, которое представляет день, месяц, год в значении |
Year(дата) |
даты. |
1.4. Операторы VBA
Оператор VBA представляет собой полную команду языка VBA. Он мо- жет содержать ключевые слова, переменные, константы, свойства объектов и выражения.
Текст оператора можно продолжить на другой строке, если текущую строку закончить пробелом и символом подчеркивания ( _ ).
В одной строке могут находиться несколько операторов. В этом случае они отделяются друг от друга двоеточием (:).
VBA позволяет добавлять в текст программы комментарии. Комментарий
– это текст, который начинается с апострофа ('). При этом все символы, начиная от апострофа до конца строки, не будут обрабатываться компилятором. Ком- ментарии выполняют две важные функции:
1Делают программу легко читаемой, поясняя смысл программных кодов и алгоритма.
2Временно отключают фрагменты программы при ее отладке.
8
1.4.1. Оператор присваивания
Синтаксис:
[Let] <Переменная или свойство объекта> = <выражение>
Пример1:
Dim a As Integer, стр As String
Let стр = "компьютер"
а = 5 : a = a + 4
Пример2 - Значение выражения может быть присвоено только в том слу- чае, если типы переменной и выражения совместимы:
Dim a As Integer, стр As String
стр = “компьютер”
а = “монитор” ' нельзя присвоить числовой переменной значение строки
1.4.2. Встроенные диалоговые окна
В проектах VBA можно использовать две разновидности встроенных диалоговых окон: окна сообщений и окна ввода. Окно сообщений (MsgBox) выводит простейшие сообщения для пользователя, а окно ввода (InputBox) обеспечивает ввод информации.
Синтаксис функции InputBox (некоторые необязательные параметры здесь не указаны):
InputBox (<сообщение> [,<заголовoк >] [, <ответ>])
Эта функция отображает диалоговое окно с сообщением и полем, в кото- ром пользователь может напечатать ответ.
Аргументы:
∙<сообщение> — строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата
9
каретки (Сhr(13)), символа перевода строки (chr (10)) или комбинацию этих символов (Chr( 13) & Chr (10)).
∙<заголовoк >— строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка поме- щается имя приложения Excel.
∙<ответ> — строковое выражение, отображаемое в поле ввода как исполь- зуемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым.
Пример1:
Dim Имя As String
Имя = InputBox("Ваше имя", "Привет!", "Анна")
Рис. 1
Пример2 - так как функция InputBox возвращает текст, то для ввода чи- словой информации используется функция Val, которая преобразует текст в число:
Dim a As Single
a = Val(InputBox("Введите коэффициент a="))
Рис. 2
10