
- •Часть 2.
- •8 Архитектура проекта
- •8.1 Введение (основные элементы проекта и их построение)
- •8.1.2 Этапы написания проекта
- •Установка (и удаление) элементов управления на лист Excel
- •Установка начальных значения свойств элементов управления
- •Установка порядка расположение элементов управления (установка одного элемента управления над другим)
- •Создание пользовательской формы
- •Создание модулей макросов проекта
- •Создание событийных процедур элементов управления, а так же событийных процедур родительских объектов
- •Быстрый переход в событийную процедуру элемента управления
- •8.1.3 Изменение свойств проекта
- •8.1.4 Установка и снятие защиты проекта
- •9 Доступность подпрограмм и полей модулей проектов
- •9.1 Введение
- •9.2 Надстройки проектов
- •9.2 Ссылка на другой проект
- •10 Отладка кода программы в vba редакторе
- •10.1 “Компиляция” проекта
- •10.2 Запуск подпрограмм, не имеющих входных параметров из редактора vba
- •10.3 Пошаговый запуск подпрограмм, не имеющих входных параметров
- •10.4 Непосредственный запуск формы из редактора vba
- •10.5 Точки останова и оператор Stop
- •10.6 Аварийное прерывание работы программы приложением Excel
- •10.7 Принудительная остановка и принудительное прерывание программы пользователем
- •10.8 Окно локальных переменных и Окно отладки
- •11 Справочная система vba
- •11.1 Переход к справочной системе
- •11.2 Список имен потомков, методов и свойств объектов в окне редактора модуля
- •11.3 Просмотр списка операторов vba в окне редактора модуля (просмотр библиотек)
- •11.4 Окно просмотра свойств, методов, потомков и родителей объектов
- •12 Дополнительная информация
- •12.1 Параметры работы редактора vba
- •12.2 Защита от макровирусов
- •12.3 Причины, по которым код vba проекта может не исполняться
- •Приложение 1 Задание 1 (автозаполнение пола)
- •Задание 2 (автозаполнение комментариев к числам)
- •Задание 3 (заучиватель иностранных слов)
- •Задание 4 (телефонная книжка с поиском)
- •Задание 5 (программирование связей таблиц Excel)
- •Задание 6 (защита служебных полей таблицы Excel)
- •Приложение 2 (Программирование через редактирование макроса) Введение
- •Запись макроса в книгу Excel
- •Запуск макроса из меню.
- •Быстрый переход в код макроса
- •Пример создание процедуры через макрос.
- •Некоторые замечания по запуску макроса из событийных процедур
- •Назначение управляющих клавиш для запуска готового макроса Назначение управляющих клавиш макросам через меню приложений
- •Программное назначение управляющих клавиш макросам
- •Приложение 3( Создание меню ) Введение
- •Типы меню приложений
- •Создание (и удаление) подпунктов главного меню через меню приложений Создание (и удаление) подпункта главного меню
- •Создание (и удаление) пункта меню к макросу
- •Удаление меню
- •Добавление пунктов в меню
- •Свойства и методы пунктов меню
- •Переключатель в пункте меню
- •Коды пиктограмм пункта меню
- •Односеансное контекстное меню
- •После выбора пункта ПервыйУровень
- •После выбора пункта ВторойУровень1 Назначение управляющих клавиш к пункту меню
- •Приложение 4 ( Программная обработка модулей vba ) Введение
- •Экспорт модуля проекта в файл
- •Импорт модуля проекта из файла
- •Импорт модуля через “организатор” (данный код только для Word приложения)
- •Создание свойств и методов пользовательского класса
- •Создание событий пользовательского класса
- •Приложение 6 (Ссылка на приложение ms Office)
- •Приложение 7 (связь с таблицами и запросами базы данных) Введение
- •Связь с базой данных через указатели
- •Непосредственная загрузка таблицы базы данных в Excel таблицу
- •Форма для интерактивной работы с записью таблицы базы данных
- •С записями таблицы базы данных
- •Браузер таблиц и запросов базы данных
- •Методы поиска объекта Recordset
- •Пример использования метода Seek
- •Пример использования методов Find
- •Приложение 8 (Обращение к api-функциям) Введение
- •Скрытие и отображение панели задач через api функции
- •Запуск ярлыка и исполняемых файлов через api функцию
- •Приложение 9 (Основные понятия визуального программирования на доступных примерах)
- •Яблоко1.Сплющить
- •8 Архитектура проекта 3
- •8.1 Введение (основные элементы проекта и их построение) 3
- •Приложение 3( Создание меню ) 64
- •Приложение 4 ( Программная обработка модулей vba ) 90
- •Приложение 5 (Создание модуля класса) 94
- •Приложение 6 (Ссылка на приложение ms Office) 108 Приложение 7 (связь с таблицами и запросами базы данных) 113
- •Часть 2
С записями таблицы базы данных
На рисунке практически все элементы помечены своим именем, за исключением полосы прокрутки - ScrollBar1, и кнопок добавить и удалить - CommandButton1, CommandButton2. Объекты TextBox помечены сокращенным именем. В объект LabelRecord выводится номер текущей записи и количество записей. После создания формы необходимо ввести в ее модуль следующий программный код:
Option Explicit
Const ПутькБазе = "c:\Мои документы\R.mdb"
Const ИмяТаблицы = "Таблица1"
'Объявляем переменную для ссылки на базу данных
Dim db As Database
'Объявляем переменную для ссылки на таблицу базы данных
Dim r As Recordset
Dim flag As Boolean
'процедура добавления данных в указатель
Sub ДобавитьДанные(ByVal Данные As Variant, _
ByVal ИндексПоля As Long)
Dim s As String
'запрет обновления данных в указателях
If flag = True Then
Exit Sub
End If
'Разрешаем редактировать поле записи
r.Edit
'Определяем логический тип
If UCase(TypeName(r.Fields(ИндексПоля).Value)) = "BOOLEAN" Then
Данные = CBool(Данные)
'Определяем тип Data
ElseIf UCase(TypeName(r.Fields(ИндексПоля).Value)) = "DATE" Then
On Error Resume Next
Данные = CDate(Данные)
'определяем не строковый тип
ElseIf UCase(TypeName(r.Fields(ИндексПоля).Value)) <> "STRING" Then
'заменяем "," на "."
While InStr(Данные, ",") <> 0
Mid(Данные, InStr(Данные, ","), 1) = "."
Wend
'преобразуем данные в числовой формат
Данные = Val(Данные)
End If
If Данные <> "" Then
'Отключаем ошибку переполнения данных
On Error Resume Next
r.Fields(ИндексПоля).Value = Данные
Else
'присваиваем пусто значение полю
r.Fields(ИндексПоля).Value = Nothing
End If
'Сохраняем изменения в поле записи
r.Update
End Sub
'процедура обновления данных в полях ввода из текущей записи
Sub ОбновитьПолеВвода(ByVal ИмяПоля As Variant, _
ByVal ИндексПоля As Long)
'Обнуляем поле
ИмяПоля.Value = ""
On Error Resume Next
If UCase(TypeName(r.Fields(ИндексПоля).Value)) = "DATE" Then
'присваиваем отформатированное значение полю дата
ИмяПоля.Value = Format(r.Fields(ИндексПоля).Value, "dd.mm.yyyy")
Else
ИмяПоля.Value = r.Fields(ИндексПоля).Value
End If
End Sub
'Кнопка добавить
Private Sub CommandButton1_Click()
r.AddNew
r.Update
ScrollBar1.Max = r.RecordCount - 1
ScrollBar1.Value = r.RecordCount - 1
ScrollBar1.LargeChange = ScrollBar1.Max
End Sub
'Кнопка удалить
Private Sub CommandButton2_Click()
If ScrollBar1.Max > 0 Then
r.Delete
If ScrollBar1.Value > r.RecordCount - 1 Then
ScrollBar1.Value = r.RecordCount - 1
End If
ScrollBar1.Max = r.RecordCount - 1
ScrollBar1.LargeChange = ScrollBar1.Max
Else
MsgBox "Нельзя удалить единственную запись в таблице!", vbCritical
Exit Sub
End If
ScrollBar1_Change
End Sub
'Полоса прокрутки, для перемещения по записям таблицы
Private Sub ScrollBar1_Change()
'Ввывод номера текущей записи и их количества
LabelRecord.Caption = "Запись № " & ScrollBar1.Value + 1 & _
" Из " & ScrollBar1.Max + 1
'перемещаемся на запись по положению ползунка полосы прокрутки
r.MoveFirst
r.Move ScrollBar1.Value
'запрещаем обновление данных в указателях
flag = True
'Обновляем поля ввода из текущей записи
ОбновитьПолеВвода TextBox1, 0
ОбновитьПолеВвода TextBox2, 1
ОбновитьПолеВвода CheckBox1, 2
'разрешаем обновление данных в указателях
flag = False
End Sub
'Строковое поле, поле Memo или числовое поле или Data
Private Sub TextBox1_Change()
ДобавитьДанные TextBox1.Text, 0
End Sub
'Строковое поле, поле Memo или числовое поле или Data
Private Sub TextBox2_Change()
ДобавитьДанные TextBox2.Text, 1
End Sub
'Логическое поле
Private Sub CheckBox1_Click()
ДобавитьДанные CheckBox1.Value, 2
End Sub
Private Sub UserForm_Initialize()
'При загрузке формы устанавливаем указатели на базу
Set db = Workspaces(0).OpenDatabase(ПутькБазе)
Set r = db.OpenRecordset(ИмяТаблицы)
'Имя таблицы в заголовок формы
Me.Caption = ИмяТаблицы
If r.RecordCount = 0 Then
'если таблица не имеет записей, добавляем пустую запись
CommandButton1_Click
End If
'Загрузка имен полей
Label1.Caption = r.Fields(0).Name
Label2.Caption = r.Fields(1).Name
'Имя логическое поля
CheckBox1.Caption = r.Fields(2).Name
'Установка границ полосы прокрутки
ScrollBar1.Min = 0
ScrollBar1.Max = r.RecordCount - 1
ScrollBar1.Value = 0
ScrollBar1.LargeChange = ScrollBar1.Max
ScrollBar1_Change
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'При нажатии на кнопку закрыть [х], выгружаем форму
Unload Me
End Sub
Private Sub UserForm_Terminate()
'При закрытии формы, закрываем указатели
r.Close
db.Close
End Sub