p align="left">переменные уровня модуля используются только в модуле, в котором они описаны, но не в других модулях данного проекта. Описываются при помощи оператора Dim или Private в области описания модуля, т.е. перед описанием процедур; переменные уровня модуля, описанные при помощи инструкции Public, являются доступными для всех процедур проекта. Такие переменные называются открытыми. Закрытая (Private) переменная сохраняет свое значение, только пока выполняется процедура, в которой эта переменная описана. При завершении процедуры значение переменной теряется, и при повторном запуске процедуры его надо заново инициализировать. Переменные, описанные оператором Static, сохраняют свое значение по выходу из процедуры, пока работает программа. Для обязательного объявления всех переменных в начале модуля, в так называемой области модуля General Declarations, надо поместить директиву Option Explicit. Использование этой директивы не допускает возможности неправильного ввода имени переменной, которая применяется в одной или не скольких процедурах модуля. Например, если переменная была объявлена как Ставка, а в коде при наборе вместо русской буквы с была использована латинская буква с, то это приведет к ошибке. В отсутствие директивы Option Explicit подобную ошибку было бы трудно отследить. 2.3 Описание массивов Как и в других языках программирования, в VBA можно использовать массивы. Массив, как и любую переменную, надо объявлять, используя операторы Dim, Static, Private и Public, которые также задают область видимости переменной. В массиве допускается описание до 60 размерностей. При определении размерности надо указывать верхнюю, а также нижнюю границу. Если нижний индекс не задан явно, нижняя граница массива определяется директивой Option Base. Если отсутствует директива Option Base, нижняя граница массива равняется нулю. Например, в следующем операторе объявляется одномерный массив (вектор) из 12 целых чисел, причем по умолчанию первый элемент массива - А (0), а последний - А (11). В этом случае говоря, что 0 - базовый индекс. Dim А (11) As Integer Данный же оператор объявляет двухмерный массив 33 (матрицу), состоящий из действительных чисел. Dim B (2, 2) As Single Можно изменить базовый индекс, написав в области объявлений модуля директиву Option Base 1. После этого индексы массивов А и В будут начинаться с единицы. Например, в следующем операторе объявляется вектор, состоящий из 11 элементов. Option Base 1 Dim A (11) As Integer Другим способом изменения базового индекса является использование ключевого слова То при объявлении массива. Dim B (1 To 3, 1 To 3) As Single Dim A (1 To 12) As Integer Инициализацию элементов массива можно производить по-разному: последовательностью операторов: Dim B (1, 1) As Single B (0, 0) = 2 : B (0, 1) = 4 B (1, 0) = 1 : B (1, 1) = 6 оператором цикла: Dim M (1 To 9, 1 To 9) As Integer Dim i As Integer Dim j As Integer For i = 1 To 9 For j = 1 To 9 M (i, j) = i * j Next Next Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не надо указывать размерность, например: Dim R () As Single Затем в программе следует вычислить необходимый размер массива в некоторой переменной, например n, и изменить размер динамического массива с помощью оператора ReDim. В следующем примере сначала объявляется динамический массив, а затем устанавливаются границы его индекса. Dim R () As Double ReDim R (1 To 10) 2.4 Операторы языка и управляющие конструкции Математические операторы позволяют выполнять в программе действия над числами. В таблице 2.2 приведены арифметические операторы и выполняемые ими функции. Таблица 2.1 - Префиксы, используемые в наименованиях переменных |
Операция | Знак | Запись | Типы данных | Действие | | Сложение | + | a + b | Byte, Short, Integer, Long, Single, Double, Decimal | Складывает два числа | | Вычитание | - | a - b | Byte, Short, Integer, Long, Single, Double, Decimal | Вычитает из одного числа другое | | Деление | / | a/b | Byte, Short, Integer, Long, Single, Double, Decimal | Делит два числа и возвращает результат с плавающей точкой | | Деление нацело | \ | a\b | Byte, Short, Integer, Long, Single, Double, Decimal | Делит два числа и возвращает целый результат (остаток отбрасывается) | | Остаток | Mod | a Mod b | Byte, Short, Integer, Long, Single, Double, Decimal | Вычисляется остаток от деления одного числа на другое | | Умножение | * | а * b | Byte, Short, Integer, Long, Single, Double, Decimal | Умножает два числа | | Возведение в степень | ^ | a ^ b | Byte, Short, Integer, Long, Single, Double, Decimal | Возводит число в степень | | |
Математические операторы предназначены для создания выражений. Выражения могут содержать переменные, константы, функции, связанные более чем одним оператором. Если в выражении отсутствуют скобки, то операторы выполняются в следующем порядке: возведение в степень; умножение и деление; деление нацело; взятие остатка от деления; сложение и вычитание. Можно изменить порядок вычисления в выражении, используя круглые скобки. В VBA, как и во всех языках программирования, существуют управляющие конструкции, предназначенные для управления порядком выполнения команд. Различают два основных типа управляющих операторов: - If - Select..Case Конструкция If используется в том случае, когда необходимо, чтобы группа операторов выполнялась при соблюдении определенных условий. Конструкция Select..Case позволяет на основании анализа значения заданного выражения выполнять те или иные действия. В свою очередь, управляющие операторы if бывают двух видов: - If...Then - If...Then...Else Конструкция If...Then применяется, когда необходимо выполнить определенные действия в зависимости от некоторого условия. Управляющая конструкция If...Then...Else используется в том случае, когда необходимо выполнить разные действия в зависимости от условия. Конструкция If.. .Then.. .Else аналогична конструкции If...Then, но позволяет задать действия, исполняемые как при выполнении условий, так и в случае их невыполнения. Основанием для принятия решений в управляющих конструкциях являются условные выражения, поэтому предварительно необходимо сказать несколько слов об этих выражениях и работе с ними. Условные выражения - это такие выражения, которые возвращают одно из двух значений: Истина или Ложь. В условных выражениях используют операторы сравнения, приведенные в таблице 2.3. Таблица 2.3 - Операторы сравнения для условных выражений |
Операция | Знак | | Меньше | < | | Меньше или равно | <= | | Больше | > | | Операция | Знак | | Больше или равно | >= | | Равно | = | | Не равно | <> | | |
Над условными выражениями можно выполнять действия логической математики (логические операции). К логическим побитовым операциям относятся операции And, Or, And Also, Or Else, Xor, Not.Операция Not имеет один операнд, остальные - по два операнда. Ключевые слова IF и End If имеют тот же смысл, что и в конструкции If...Then. Если заданное в конструкции условие не выполняется (результат проверки равен False), и конструкция содержит ключевое слово Else, Visual Basic выполнит последовательность конструкций, расположенных следом за Else. После чего управление перейдет к конструкции, следующей после End If.
2.5 Стандартные функции работы с файлами, строками, диалоговыми окнами В VBA имеется ряд функций и операторов по работе с файлами и каталогами. Одним из удобств является то, что не требуется устанавливать ссылку на используемую библиотеку. В таблице 2.4 эти функции и представлены. Таблица 2.4 - Функции и операторы для работы с файлами |
Функция, оператор | Назначение | | Open | Открывает файл | | Close | Закрывает все файлы | | Close # | Закрывает файл по идентификатору | | Reset | Закрывает все открытые файлы, записывает содержимое буферов. | | Print tt | Записывает данные в файл | | FileCopy | Копирует файл | | EOF | Определяет метку конца файла | | FileAttr | Возвращает режим доступа открытого файла | | FileDateTime | Возвращает дату и время создания файла | | FileLen | Возвращает размер файла в байтах | | FreeFile | Возвращает номер свободного идентификатора | | GetAttr | Получает атрибуты файла | | SetAttr | Устанавливает атрибуты файла | | Loc | Возвращает номер текущей позиции в файле | | LOF | Возвращает размер открытого файла в байтах | | Seek | Устанавливает на заданную номером позицию или запись в файле | | Dir | Возвращает содержимое текущей папки | | Kill | Удаляет файл | | Lock | Блокирует файл при работе в многопользовательской среде | | Unlock | Снимает блокировку файла в многопользовательской среде | | Name | Задает имя файла | | Get # | Читает данные из файла | | Input | Читает данные из файла | | Input # | Читает данные из файла | | Line Input # | Читает строку из файла | | Put # | Записывает данные в файл | | Write # | Записывает данные в файл | | |
В таблице 2.5 представлены функции обработки строковых выражений, которые позволяют произвести широкий спектр операций: от нахождения длины строки, до замены в строке подстрок. Таблица 2.5 - Функции для работы со строками |
Функция | Назначение | | Asc | Возвращает ASCII- код символа | | Chr | Преобразовывает ASCII-код в символ | | InStr, InStrRev | Осуществляет поиск одной строки в другой | | Lcase | Изменяет регистр букв исходной строки на нижний | | Left | Возвращает указанное количество символов с начала строки | | Len | Возвращает количество символов в строке | | Ltrim, RTrim, Trim | Удаляют пробелы, расположенные соответственно в начале, в конце и с обеих сторон символьной строки | | Функция | Назначение | | Mid | Возвращает заданное количество символов из произвольного места строки | | Right | Возвращает указанное количество символов с конца строки | | Str, CStr | Преобразовывают числовое выражение в строку | | StrReverse | Изменяет порядок следования символов в строке на обратный | | StrConv | Изменяет регистр букв символьной строки | | Продолжение таблицы 2.5 | | Val | Преобразовывают строку в числовое выражение | | UCase | Изменяет регистр букв исходной строки на нижний | | |
В проектах VBA часто встречаются две разновидности диалоговых окон: окна сообщений и окна ввода. Они встроены в VBA, и если их возможностей достаточно, то можно обойтись без проектирования диалоговых окон. Окно сообщений выводит простейшие сообщения для пользователя, а окно ввода обеспечивает ввод информации. Функция InputBox выводит на экран диалоговое окно, содержащее сообщение, поле ввода, и две кнопки OK и Cancel. Она устанавливает режим ожидания ввода текста пользователем и нажатия кнопки, а затем, при нажатии на кнопку OK, возвращает значение типа String, содержащее текст, введенный в поле ввода. При нажатии кнопки Cancel возвращается пустая строка. Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата. 3 АЛГОРИТМ РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИ В MS WORD S1 Для i=1 до len(s1)-1 Если mid(s1, i,1)=” ” Если mid(s2,1,1)=mid(s2,len(s2),1) S3=s3+s2+” ” s2 = "" Иначе s2 = s2 + Mid(s1, i, 1) s3 4 АЛГОРИТМ РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИ В MS EXCEL Для i=1 до 5 Для j= 1 до 5 a(i,j) sum = 0 Для i=1 до 5 b[i]=a[i,i] sum=sum+b[i] Для i=1 до 5 Для i=1 до 5 Для j=1 до 5 a(i,j) 5 ТЕСТОВЫЕ ПРИМЕРЫ MS WORD №1 Дед Мороз - красный нос, ты подарки нам принёс? Дед №2 Трактат о несчастной любви. Трактат MS EXCEL №1 |
1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 10 | | 7 | 9 | 11 | 13 | 15 | | 2 | 4 | 4 | 6 | 7 | | 3 | 6 | 4 | 0 | 8 | | |
Результат |
1 | 2 | 3 | 4 | 5 | | 0,18 | 0,21 | 0,24 | 0,27 | 0,3 | | 7 | 9 | 11 | 13 | 15 | | 0,06 | 0,121 | 0,121 | 0,18 | 0,21 | | 3 | 6 | 4 | 0 | 8 | | |
Приложение А ЭКРАННЫЕ ФОРМЫ Рисунок А.1 - Работа программы в MS Word Рисунок А.2 - Пример работы программы в MS Word Приложение Б ЛИСТИНГ ПРОГРАММЫ В MS EXCEL Sub Laba1() Dim m, i, j, k As Integer Dim sum As Double Dim a(5, 5), b(10) As Long For i = 1 To 5 For j = 1 To 5 a(i, j) = Cells(i, j) Next j Next i sum = 0 For i = 1 To 5 k = i j = i b(k) = a(i, j) sum = sum + b(k) Next i For i = 2 To 5 Step 2 For j = 1 To 5 a(i, j) = a(i, j) / sum Next j Next i Cells(7, 1) = "Конечная" Cells(7, 2) = "матрица:" For i = 1 To 5 For j = 1 To 5 Cells(i + 8, j) = a(i, j) Next j Next i End Sub Приложение В ЛИСТИНГ ПРОГРАММЫ В MS WORD Sub Laba2() Dim s1, s2, s3 As String Dim i, j As Integer Selection.WholeStory s1 = Selection.Text For i = 1 To Len(s1) - 1 If Mid(s1, i, 1) = " " Then If Mid(s2, 1, 1) = Mid(s2, Len(s2), 1) Then s3 = s3 + s2 + " " End If s2 = "" Else s2 = s2 + Mid(s1, i, 1) End If Next i Selection.Text = s1 + s3 End Sub
Страницы: 1, 2
|