- •1. Операторы, процедуры, типы данных vba
- •Основные типы данных в vba
- •Преобразование типов данных
- •Is (оператор)
- •Функция IsArray
- •IsArray (Имя переменной)
- •IsDate (функция)
- •IsEmpty (функция)
- •IsError( функция)
- •IsMissing(функция)
- •IsNull (функция)
- •IsNumeric (функция)
- •IsNumeric(выражение)
- •IsObject(функция)
- •2. Работа с объектами
- •3. Применение процедур vba
- •Модель программирования в Access
- •Типы процедур
- •Поле со списком
- •Вызов процедур
- •Запуск процедур-функций
- •Запуск процедур-подпрограмм
- •4. Операторы vba
- •Логические операторы Логические операторы
- •Некоторые функции в vba
- •5. Объявление переменных, констант в vba
- •Создание пользовательских типов данных
- •Dim c As клиент
- •Cоздание массивов постоянной длины
- •Cоздание массива из списка значений
- •Создание динамических массивов
- •6.Организация ввода-вывода данных с помощью функций InputBox и MsgBox
- •7. Управляющие структуры
- •Структура If … Then
- •Структура If … Then … Else
- •Вторая группа операторов]
- •Второй блок операторов]
- •Алгоритм
- •Переход по метке
- •10: Программный код Cтруктура Select Case
- •8. Циклы в vba Cтруктура For ….Next
- •Операторы
- •Структура For Each … Next
- •Структура Do… Loop
- •Структура Do While … Loop
- •Структура Do ….While Loop
- •Cтруктуры Do Until … Loop и Do … Loop Until
- •9. Операторы Exit
- •Функции для работы со строковыми переменными
- •11. Классические задачи программирования: сортировка, поиск
- •If IsNull(массив(X)) Then Exit Function
- •12. Управление базами данных
- •Основные понятия базы данных
- •Установка значений свойств
- •Считывание свойств
- •Вызов методов
- •Объект.Метод
- •Присваивание значений возвращаемых из методов
- •13. Объект Database –база данных
- •Cвойства объекта Database
- •Методы объекта Database
- •14. Объект TableDef
- •Свойства объекта TableDef
- •Методы объекта TableDef
- •Использование свойства Fields объекта TableDef
- •Использование свойства TableDefs объекта Database
- •15. Объект Form –экранная форма Свойства объекта Form
- •Применение некоторых свойств oбъекта Form Свойство Me
- •Cвойство ActiveControl
- •Свойство CurrentRecord
- •Свойство Visible
- •Свойства OrderBy и OrderByOn
- •Методы объекта Form
- •Список и поле со списком
- •Глава 16. Объект DoCmd и его методы
- •Глава 17. Объект Recordset
- •Свойства объекта Recordset
- •Свойства bof и eof
- •Создание объекта Recordset
- •Глава 18. Применение объекта Debug
- •Глава 19. Применение свойства RecordCount
- •Применение свойства Fields
- •Применение метода GetRows объекта Recordset
- •Глава 21. Объекты QueryDef
- •Свойства объектов QueryDef
- •Использование метода Execute
- •Глава 22. Применение языка sql
- •Использование выражения select
- •Простые формы select
- •Фильтрация данных с помощью предложения where
- •Сортировка данных
- •Объединение таблиц
- •Глава 23. Объект Report События
- •Некоторые свойства объекта Report
- •Методы объекта Report
- •Применение свойств объекта Report
- •Глава 24. Настройка пользовательского интерфейса
- •Глава 25. Создание и изменение панелей команд
- •Глава 26. Создание и удаление контекстных меню
- •Приложение
- •Этапы реализации задачи:
- •If IsNull(.Fields!цена) Then Exit Do
9. Операторы Exit
В VBA имеется несколько операторов Exit для выхода из процедур-функций, процедур-подпрограмм, процедур обработки свойств или повторно выполняемых блоков операторов в структурах Do…loop, For…Next, For Each … Next.
Операторы Exit обрабатываются следующим образом:
Exit Function, Exit Sub и Exit Property вызывают немедленный выход из функции, подпрограммы или процедуры обработки свойств, в которой находится соответствующий оператор Exit…. Управление получает следующий оператор в вызывающей процедуре.
Exit Do может применяться в структуре Do…loop и предназначен для немедленной передачи управления оператору. следующему после Loop.
Exit For может применяться только в структуре For…Next или For Each …Next и предназначен для немедленной передачи управления оператору, следующему после
Next.
Пример
Дан одномерный массив. Найти первый отрицательный элемент и определить его номер позиции.
Рrivate Sub Кнопка0_Click()
Dim a(10) As Integer, i, k As Byte, x As Integer, s As String
For i = 1 To 10
a(i) = InputBox("Ввести А")
s = s & a(i) & " "
Next i
Поле1.Value = s
For i = 1 To 10
If a(i) < 0 Then
k = i
Exit For
End If
Next i
MsgBox "k=" & Str(k)
MsgBox "отрицательное =" & a(k)
End Sub
Функции для работы со строковыми переменными
Функция |
Назначение |
Len (строка) |
Возвращает длину строки, включая пробелы |
Trim (строка) |
Удаляет начальные и конечные пробелы |
Ltrim (строка) |
Удаляет начальные пробелы |
Rtim(строка) |
Удаляет конечные пробелы |
Mid(строка,начальнаяпозиция[, числосимволов]) |
Выделяет из строки, начиная с указанной позиции заданное число символов |
Mid(строка, начальнаяпозиция) |
Выделяет из строки, начиная с указанной позиции оставшуюся часть |
Instr (нач_ позиция,строка_исходная,подстрока) |
Ищет позицию первого включения внутри заданной строки подстроки |
Right(строка, число_символов) |
Из заданной строки выделяет справа заданное число символов |
Left(строка,число_символов) |
Из заданной строки выделяет слева заданное число символов |
Space(число_пробелов) |
Строка пробелов заданной длины |
Time() |
Строка, содержащая текущее время |
Date() |
Строка, содержащая текущую дату |
Str(число) |
Преобразует число в строку |
Val(строка) |
Преобразует строку в число |
Lcase(строка) |
Строка, алфавитные символы которой преобразованы в нижний регистр |
Ucase(строка) |
Строка, алфавитные символы которой преобразованы в верхний регистр |
Chr(код_символа) |
Возвращает символ |
String(Число_символов,символ) |
Задаёт строку заданной длины указанных символов |
StrComp (строка1,строка2[,0 или 1 ]) |
Сравнивает строку1 со строкой2, если 1- не различать верхний регистр, 0-различать |
Пример
Выбрать слова из предложения, начинающиеся на заданную букву.
Dim s As String, n, k As Integer, i As Integer, b, c As String
s = InputBox("Ввести строку") 'Вводим строку
c = InputBox("Ввести символ") 'Вводим заданную букву
s = Trim(s) & " " 'Удаляем пробелы в начале
' и конце и добавляем в конце
n = Len(s) 'Вычисляем длину строки
i = 1 'Задаём начальное_значение пар-ра цикла
Do While i <= n - 1 'Пока не достигнут конец строки
k = InStr(i, s, " ") 'Ищем позицию пробела,начиная с i
b = Mid(s, i, k - i) 'Выделяем слово
If Left(b, 1) = c Then 'Если 1-я буква слова совпадает
MsgBox b 'с заданным символом,то вывод
End If 'слова
i = k + 1
Loop
Пример
Одномерный массив задан строкой текстового поля.
Написать функцию, которая ищет максимальный элемент в массиве.
Так как размер строки не задан, то удобно использовать понятие дина- мического массива.
Алгоритм выполнения задачи:
1.В конструкторе форм создать форму вида:
В форме размещены два текстовых поля с именами Поле0 и Поле3 и кнопка, по нажатию которой пишем программный код:
Private Sub Кнопка2_Click()
Dim s As String, n, k As Integer, i, j As Integer, b, c As String
Dim a() As Integer, y As Integer
s = Поле0.Value
s = Trim(s) & " "
i = 1 : j = 1
Do While i <= Len(s) - 1 'Пока не достигнут конец строки
k = InStr(i, s, " ") 'Ищем позицию пробела,начиная с i
b = Mid(s, i, k - i) 'Выделяем слово
ReDim Preserve a(1 To j) 'Объявляем динамический массив с
a(j) = Val(b) 'сохранением предыдущих значений
j = j + 1
s = Mid(s, k + 1) 'Выделяем из строки оставшуюся часть
'после первого пробела
s = LTrim(s) ' Удаляем пробелы слева
Loop
y = максимум(a) 'Вызов функции максимум
Поле3.Value = Str(y) ' Вывод максимального значения
' в текстовое поле
End Sub
Private Function максимум(b() As Integer) As Integer
max = b(1)
For i = 1 To UBound(b)
If b(i) > max Then
max = b(i)
End If
Next i
максимум = max
End Function
Результат работы программы будет выглядеть:
В программе использовано свойство Value элемента управления. Оно означает, что текст содержится в поле или в текстовой части поля со списком. В данном случае текст содержится в поле.
Пример
Дан двумерный массив А(3,3), заполненный случайными числами.
Получить А*А, где А- транспонированная матрица.
Алгоритм
В конструкторе форм создадим форму с 3 текстовыми полями для вывода матриц А, А, А*А и кнопкой, по нажатию которой запишем следующий программный код:
Private Sub Кнопка8_Click()
Dim a(3, 3), at(3, 3), res(3, 3) As Single, i, j, k As Byte, s As String, sum As Single
‘ Заполнение двумерного массива случайными числами
For i = 1 To 3
For j = 1 To 3
a(i, j) = Int(10 * Rnd(5))
‘ Формирование строки для вывода массива
s = s & Str(a(i, j)) & " "
Next j
s = s & Chr(13) & Chr(10)
Next i
Поле0.Value = s
s = " "
‘ Получение транспонированной матрицы
For i = 1 To 3
For j = 1 To 3
at(i, j) = a(j, i)
s = s & Str(at(i, j)) & " "
Next j
s = s & Chr(13) & Chr(10)
Next i
Поле4.Value = s
s = " "
‘ Умножение матрицы на матрицу
For i = 1 To 3
For j = 1 To 3
sum = 0
For k = 1 To 3
sum = sum + a(i, k) * at(k, j)
Next k
res(i, j) = sum
s = s & Str(res(i, j)) & " "
Next j
s = s & Chr(13) & Chr(10)
Next i
Поле6.Value = s
End Sub
Результат работы:
Пример
Создать функцию, которая находит сумму всех элементов в двумерном массиве.
Алгоритм
1.В окне базы данных нажать вкладку Модули/Создать и записать функцию:
Public Function СУММА(A() As Integer) As Integer
СУММА = 0
For i = 1 To UBound(A, 2)
For j = 1 To UBound(A, 2)
СУММА = СУММА + A(i, j)
Next j
Next i
End Function
2. В конструкторе форм создать форму с элементами: 2 текстовых поля под вывод матрицы и суммы элементов массива и кнопку, по нажатию которой пишем процедуру:
Private Sub Кнопка8_Click()
Dim A(3, 3) As Integer, i, j As Byte, s As String, y As Integer
' Заполнение матрицы через генератор случайных чисел
For i = 1 To 3
For j = 1 To 3
A(i, j) = Int(10 * Rnd(5))
s = s & Str(A(i, j)) & " "
Next j
s = s & Chr(13) & Chr(10)
Next i
Поле0.Value = s
' Вызов функции СУММА с передачей параметра А
y = СУММА(A)
Поле6.Value = Str(y)
End Sub
Пример
Вычислить n!
n!=1*2*3*4*5* …
При решении этой задачи удобно использовать понятие рекурсивности объекта.
Объект называется рекурсивным, если он целиком или частично определяет самого себя. Рекурсивной функцией-процедурой называется такая функция-процедура, которая вызывает саму себя.
Алгоритм.
Создаём модуль с функцией:
Public Function factorial(n As Integer) As Double
factorial = 1
If n > 0 Then
‘ Рекурсивный вызов функции
factorial = n * factorial(n - 1)
End If
End Function
В конструкторе создаём форму с 2 текстовыми полями для ввода n и вывода значения факториала и кнопкой, по нажатию которой пишется процедура:
Private Sub Кнопка8_Click()
Dim n As Integer, y As Double
n = Val(Поле0.Value) ‘ В переменную n записываем преобразованное в
‘ число значение текстового поля0
y = factorial(n)
Поле6.Value = Str(y)
End Sub