Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algoritmizatsia_i_programmirovanie_VBA_polnaya_...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
12.34 Mб
Скачать

5 Технология организации, хранения и обработки данных

5.1 Общие сведения

В каждом VBA-приложении есть свой уникальный набор объектов с их собственными свойствами (характеристиками состояния) и методами (командами обработки этих свойств). Управление состоянием элемента осуществляется с помощью посылаемых ему сообщений, указывающих объекту на необходимость выполнить тот или иной метод для достижения результата.

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

В объектном программировании есть понятие класса. Это некий проект, на основе которого создаётся конкретный объект. Класс определяет назначение объекта, его свойства и те действия, которые могут быть выполнены над этим проектом. Нам неинтересен сам по себе объект, но важно то, какие действия можно с ним совершить и какими свойствами он обладает. В системе хранится программное описание каждого используемого класса, на основании которого, при необходимости, создаются экземпляры класса. Например: описан класс кнопки, которую будем отражать в окнах приложения. Каждая отдельная кнопка — экземпляр объекта этого класса и создаётся на основании этого описания, но отличается от других некоторыми свойствами (размер, цвет, положение на экране и т. п.). Кроме методов и свойств есть понятие события. Это некоторое действие, которое можно выполнять с объектом и на которое надо программировать отклик (ответную реакцию системы).

Процедура Property — используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей.

Модуль — это именованная единица, состоящая из одной или нескольких процедур и раздела объявлений, в котором объявляются переменные, константы и пользовательские типы данных, а также устанавливаются параметры компилятора. Имеется три типа модулей:

  1. Стандартные модули — это модули, в которых можно описать доступные во всем проекте процедуры.

  2. Модули класса содержат описание объекта, который является членом класса. Процедуры, написанные в модуле класса, используются только в этом модуле. Среди модулей класса выделяют модули форм и отчетов, которые связаны с конкретной формой или отчетом. Модули форм и отчетов часто содержат процедуры обработки событий, которые срабатывают в ответ на событие в форме или отчете. Процедуры обработки событий используются для управления поведением форм и отчетов и их реакцией на действия пользователя типа щелчка мыши на кнопке.

  3. Проект — включает в себя все модули, формы и связанные с приложением объекты, относящиеся к конкретному документу, причём проект сохраняется вместе с самим этим документом. В проекте данной работы используется один стандартный модуль — Module 1 (для процедур кнопок главного окна) и два модуля форм UserForm1 (для процедур формы заказа) и UserForm2 (для процедуры формы заполнения рекламы).

5.2 Листинг программы

Объявление переменных:

Dim bd1 AsDAO.Database

Dim r1 As Recordset

Dim r2 As Recordset

Dim r3 As Recordset

Dim i As Integer, j As Integer

Кнопка «Заказ»

Private Sub CommandButton1_Click()

Set bd1 = Open Data base("C:\kontr\kontr.mdb")

Открытие ранее созданной базы в Access

Setr1 = bd1.Open Recordset("Продукция")

Открытие таблицы из ранее открытой базы

Set r2 = bd1.OpenRecordset("Контракты")

Set r3 = bd1.OpenRecordset("Заказчики")

DoWhileNotr1.EOF

Повторять пока не закончатся записи вr1

UserForm1.ComboBox1.AddItemr1!Наименование_продукта

Извлекаем значения в списоки зтаблицы «Продукция»

r1.MoveNextПереход к следующей записи

Loop

Do While Not r3.EOF

UserForm1.ComboBox3.AddItem r3!Фирма

r3.MoveNext

Loop

UserForm1.Show Вызываем диалоговое окно

EndSub

Кнопка «Продукция»

Private Sub CommandButton4_Click()

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

Set r1 = bd1.OpenRecordset("Продукция")

DoWhileNotr1.EOF

' Запись в ячейки таблицы Excel значений из таблицы «Продукция»

Worksheets("Продукция").Cells(i + 10, 1).Value = r1!Наименование_продукта

Worksheets("Продукция").Cells(i + 10, 2).Value = r1!артикул_продукта

Worksheets("Продукция").Cells(i + 10, 3).Value = r1!Количество_шт

Worksheets("Продукция").Cells(i + 10, 4).Value = r1!Цена_за_шт

Worksheets("Продукция").Cells(i + 10, 5).Value = r1!Описание

i = i + 1

r1.MoveNext

Loop

Worksheets("Продукция").Activate

End Sub

Кнопка «Контракты»

PrivateSubCommandButton6_Click()

' Код аналогичен коду кнопки «Продукция»

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

Set r1 = bd1.OpenRecordset("Контракты")

Do While Not r1.EOF

Worksheets("Контракты").Cells(j + 10, 1).Value = r1!Наименование_продукта

Worksheets("Контракты").Cells(j + 10, 2).Value = r1!Количество

Worksheets("Контракты").Cells(j + 10, 3).Value = r1!Дата

Worksheets("Контракты").Cells(j + 10, 4).Value = r1!Фирма

j = j + 1

r1.MoveNext

Loop

Worksheets("Контракты").Activate

End Sub

Кнопка «Реклама»

Private Sub CommandButton3_Click()

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

Set r1 = bd1.OpenRecordset("Продукция")

DoWhileNotr1.EOF

Загружаем значения в список из таблицы открытой ранее

UserForm2.ComboBox1.AddItemr1!Наименование_продукта

r1.MoveNext

Loop

UserForm2.Show

End Sub

Кнопка «Контракты»

Private Sub CommandButton4_Click()

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

Set r1 = bd1.OpenRecordset("Продукция")

Do While Not r1.EOF

Worksheets("Продукция").Cells(i + 10, 1).Value = r1!Наименование_продукта

Worksheets("Продукция").Cells(i + 10, 2).Value = r1!артикул_продукта

Worksheets("Продукция").Cells(i + 10, 3).Value = r1!Количество_шт

Worksheets("Продукция").Cells(i + 10, 4).Value = r1!Цена_за_шт

Worksheets("Продукция").Cells(i + 10, 5).Value = r1!Описание

i = i + 1

r1.MoveNext

Loop

Worksheets("Продукция").Activate

EndSub

UserForm1.Раскрывающийсясписок

Private Sub ComboBox1_Click()

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

k1 = ComboBox1.Text

s1 = "Select * from[Продукция] where[Наименование_продукта]=""" &k1 & """"

Set r1 = bd1.OpenRecordset(s1)

TextBox1.Text = r1!Количество_шт

TextBox2.Text = r1!Цена_за_шт

TextBox3.Text = r1!артикул_продукта

End Sub

Кнопка «Принятьзаказ»

Private Sub CommandButton1_Click()

i = i + 1Счетчик для нумерации счет-фактур

Sheets("Счёт-фактура").Range("k5") = I

Запись в ячейку номера счет-фактуры

tr = TextBox4.Text

Записываем значение из текстового поля в переменную

tr1 = TextBox1.Text

If tr > tr1 Then’Проверям наличие продукции

MsgBox ("Недостаточнопродукциинапредприятии!")

Else

Sheets("Счёт-фактура").Range("C8") = ComboBox3.Value

'Вписываем в ячейку C8 значение из списка (загружаем имя фирмы заказчика)

k2 = ComboBox3.Text

s2 = "Select * from[Заказчики] where[Фирма]=""" &k2 & """"

'SQL-запросвтаблицу «Заказчики»

Set r3 = bd1.OpenRecordset(s2)

Set r2 = bd1.OpenRecordset(s2)

Sheets("Счёт-фактура").Range("c9") = r2!Адрес

' Записываем значение из поля Адрес таблицы «Заказчики» в ячейку C9

Sheets("Счёт-фактура").Range("c10") = r3!Контактный_телефон

Sheets("Счёт-фактура").Range("a13") = ComboBox1.Value

Sheets("Счёт-фактура").Range("b13") = TextBox3.Text

Sheets("Счёт-фактура").Range("c13") = TextBox4.Text

Sheets("Счёт-фактура").Range("d13") = TextBox2.Text

Sheets("Счёт-фактура").Range("e13") = (TextBox4.Text * TextBox2.Text)

' Запись и вычисление стоимости необходимой продукции

Sheets("Счёт-фактура").Range("d18") = Date

With r1

.Edit

!Количество_шт = !Количество_шт - Val(TextBox4.Text)

Работа с Access. Уменьшение количества продукции

.Update

EndWith

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

Set r4 = bd1.OpenRecordset("Контракты")

g = ComboBox1.Value

g1 = TextBox4.Text

g2 = ComboBox3.Value

Withr4

.AddNew

' Добавление новых записей в таблицу «контракты»

'.Bookmark = .LastModified

!Наименование_продукта = g

!Количество = g1

!Дата = Date

!Фирма = g2

'.MoveNext

.Update

End With

End If

End Sub

UserForm2.Кнопка «Заполнить рекламу»

Private Sub CommandButton1_Click()

Set bd1 = OpenDatabase("C:\kontr\kontr.mdb")

Set w1 = CreateObject("Word.Application")Инициализация объекта Word

w1.Documents.Open Filename:="C:\kontr\Реклама.doc"

Открытие документаРеклама.doc

k = UserForm2.ComboBox1.Text

' Запись в переменную значения из списка

s = "Select * from[Продукция] where[Наименование_продукта]=""" &k& """" 'SQL-запрос.' Выбираем значение из таблицы

«Продукция» из столбца «Наименование_продукта» равное k

Set r1 = bd1.OpenRecordset(s)

m = InputBox("Введитеценутовара")

w1.Application.Visible = True ' Отобразить окно Word

w1.WindowState = wdWindowStateMaximize’Развернутьего

w1.Documents("Реклама").TextBox1.Text = r1!Наименование_продукта

w1.Documents("Реклама").TextBox2.Text = m

w1.Documents("Реклама").TextBox3.Text = r1!Описание

End

EndSub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]