- •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
Приложение
Рассмотрим реализацию следующей задачи:
Для некоторой фирмы-посредника между клиентом и поставщиками создать приложение, которое будет позволять вести работу с клиентом:
А) добавлять сведения о новом клиенте
Б) добавлять сведения о новых поступлениях товара
В) формировать бланк заказа, в котором будут видны сведения о
клиенте ( название, адрес, телефон, № счета), текущая дата,
список купленных товаров с указанием цены, поставщика, количества,
ставки НДС, итоговой суммы, с указанием фамилии сотрудника данной
фирмы, оформившего заказ, с возможностью сохранения данных по
продажам в отдельных таблицах для анализа деятельности предприятия,
с возможностью вывода этого бланка на печать в качестве счета к оплате.
Этапы реализации задачи:
Создать таблицу «Анализ данных» (не заполнять) с полями:
Клиент
Исполнитель
Дата_заказа
Сумма_заказа
№_заказа - тип Счётчик
Создать таблицу «Анализ данных1» (не заполнять) с полями:
Поставщик
Товар
Цена
№_заказа
Создать таблицу «Товары» с полями:
Товар
Поставщик
Цена
Адрес_поставщика
№_счета_поставщика
Создать таблицу «Клиент» с полями :
Клиент
Телефон
Адрес_клиента
№_счета_клиента
Заполнить имеющимися данными эти таблицы.
Создать таблицу «Промежуточная» (не заполнять) с полями:
Товар
Поставщик
Цена
Количество
Ставка_НДС
Сумма_с_НДС
7.Создать форму «Клиент» с элементами управления:
а) поле со списком на основе таблицы «Клиент»
б) кнопка с именем «OK»
8.Создать форму «Товар» с элементами управления:
а) список на основе таблицы «Товар» (поля
Товар, Поставщик, Цена)
б) кнопка с именем «OK»
9.Создать автоформу табличную на основе таблицы «Промежуточная».
10.Создать форму «Бланк _заказа» с элементами управления:
Поле_со_списком (имя –Исполнитель, с фиксированным набором значений, куда заносятся фамилии сотрудников данной фирмы)
Текстовое поле с именем Дата
Текстовые поля с именами Клиент, Телефон, Адрес_клиента, №счета_клиента
Кнопка «Клиенты»
Кнопка «Товары»
Кнопка «Добавить клиента»
Кнопка «Добавить товар»
Кнопка «Итог»
Текстовое поле с именем Итого
Внедрить подчинённую форму «Промежуточная»
Кнопка «Сохранить»
Форма будет выглядеть следующим образом:
11. Создать форму «Новый _товар» с элементами управления:
текстовые поля с именами: Товар, Поставщик, Цена, Адрес_поставщика, №счета_поставщика
кнопка Добавить_данные_о_товаре
В текстовом поле Дата должна стоять текущая дата.
Для этого в свойствах этого поля:
Вкладка ДАННЫЕ/Значение по умолчанию =Date().
После открытия формы в этом поле автоматически появляется значение текущей даты.
По нажатию кнопки Клиенты должна открываться форма «Клиент»:
Private Sub Клиенты_Click()
DoCmd.OpenForm ("Клиент")
End Sub
По нажатию кнопки Товары должна открываться форма «Товар»:
Private Sub Товары_Click()
DoCmd.OpenForm ("Товар")
End Sub
По нажатию кнопки Добавить Товар должна открываться форма
«Новый_товар».
Private Sub Добавить_товар_Click()
DoCmd.OpenForm ("Новый_товар")
End Sub
По нажатию кнопки Добавить Клиента данные, введённые в текстовые поля формы «Бланк» должны заноситься в таблицу «Клиент»:
Private Sub Добавить_клиента_Click()
Dim basa As Database, nabor As Recordset
Set basa = CurrentDb
Set nabor = basa.OpenRecordset("Клиент", dbOpenTable)
With nabor
.AddNew
.Fields!клиент = Me.клиент.Value
.Fields!адрес = Me.Адрес_клиента.Value
.Fields!телефон = Me.телефон.Value
.Fields!№счета = Me.№счета_клиента.Value
.Update
.Close
End With
Set basa = Nothing
End Sub
5. По нажатию кнопки OK в форме «Клиент» выбранные данные из поля со списком должны появляться в форме «Бланк» в текстовых полях с данными клиента:
Private Sub OK_Click()
Dim basa As Database, polespisok As ComboBox, frm As Form_бланк
Set basa = CurrentDb
Set polespisok = Me.ПолеСоСписком2
Set frm = Forms!бланк
If Not IsNull(polespisok) Then
frm.клиент.Value = polespisok.Column(0)
frm.Адрес_клиента.Value = polespisok.Column(1)
frm.телефон.Value = polespisok.Column(2)
frm.№счета_клиента.Value = polespisok.Column(3)
Else
MsgBox "Не было выбора"
End If
Set basa = Nothing
DoCmd.Close acForm, "Клиент"
End Sub
6. По нажатию кнопки OK в форме «Товар» выбранные данные из списка должны появляться в таблице «Промежуточная» и автоматически в форме «Бланк» в подчиненной форме «Промежуточная»:
Private Sub OK_Click()
Dim basa As Database, spisok As ListBox, nabor As Recordset, i As Variant
Set basa = CurrentDb
Set spisok = Me.Список0
If spisok.ItemsSelected.Count > 0 Then
Set nabor = basa.OpenRecordset("Промежуточная", dbOpenTable)
With nabor
Do Until IsNull(.Fields!товар)
.Edit
.Fields!товар = Null
.Fields!поставщик = Null
.Fields!цена = Null
.Fields!количество = Null
.Fields!ставка_НДС = Null
.Fields!сумма_с_НДС = Null
.Update
.MoveNext
Loop
.MoveFirst
For Each i In spisok.ItemsSelected
.Edit
.Fields!товар = spisok.Column(0, i)
.Fields!поставщик = spisok.Column(1, i)
.Fields!цена = spisok.Column(2, i)
.Update
.MoveNext
Next i
Me.Refresh
.Close
Set basa = Nothing
End With
Else
MsgBox "Список пустой"
End If
DoCmd.Close acForm, "Товар"
End Sub
7. Данные в поле Количество, Ставка_НДС вводятся с клавиатуры.
8. Для того чтобы автоматически просчитывалась стоимость заказа по каждому виду товара, и это значение появлялось в поле Сумма_с_НДС, пишем процедуру по событию для поля ставка_НДС – после обновления:
Private Sub ставка_НДС_AfterUpdate()
Me.Сумма_с_НДС = Me.цена * Me.количество + Me.цена * Me.ставка_НДС / 100
End Sub
9. По нажатию кнопки Добавитиь_данные_о_товаре в форме «Новый_товар» данные, введённые в текстовые поля формы должны заноситься в таблицу «Товар»:
Private Sub Добавить_данные_о_товаре_Click()
Dim basa As Database, nabor As Recordset
Set basa = CurrentDb
Set nabor = basa.OpenRecordset("Товар", dbOpenTable)
With nabor
.AddNew
.Fields!товар = Me.товар.Value
.Fields!поставщик = Me.поставщик.Value
.Fields!Адрес_поставщика = Me.Адрес_поставщика.Value
.Fields!цена = Me.цена.Value
.Fields!№счета_поставщика = Me.№счета_поставщика.Value
.Update
.Close
End With
Set basa = Nothing
DoCmd.Close acForm, "Новый_товар"
End Sub
10. По нажатию кнопки Итог в текстовом поле Итого должно
печататься значение суммарной стоимости заказа:
Private Sub итог_Click()
Dim basa As Database, nabor As Recordset, s As Currency
Set basa = CurrentDb
Set nabor = basa.OpenRecordset("Промежуточная", dbOpenForwardOnly)
With nabor
Do Until.EOF