
- •Часть 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
Методы поиска объекта Recordset
Возможен поиск внутри таблицы или запроса базы данных. Можно установить режим поиска в текстовых полях с учетом и без учета регистра одним из следующих операторов:
Option compare text – поиск без учета регистра
Option compare Binary - поиск с учетом регистра
Данные операторы записываются в общей области модуля в разделе объявления глобальных переменных. Для поиска внутри индексированного поля таблицы базы данных используется следующая программная конструкция:
r.Index = “Имя индексируемого поля”
r.seek “Отношение”, “Ключ Поиска”
где
r – имя объекта типа Recordset
Index – свойство для задания имени поля в котором будет осуществлен поиск
“Имя индексируемого поля” – имя соответствующего поля
seek – метод поиска
“Отношение” – знак отношения в строковом формате значения поля и ключа:
“=” – Равно
“<>” – Неравно
“>” – Больше
“<” – Меньше
“>=” – Больше либо равно
“<=” – Меньше либо раво
“Ключ Поиска” – значение с которым сравнивается значение поля в каждой записи таблицы
Метод seek может работать только с индексированным полем. Для того, что бы сделать поле таблицы индексированным необходимо в Access в режиме конструктора таблицы выбрать строку соответствующего поля и в разделе Общие задать Индексированное Поле. Метод seek ищет только первую запись в таблице, которая удовлетворяет условию.
Другим методом поиска являются методы, которые в основном применимы для просмотра запросов:
FindFirst / FindLast / FindNext / FindPrevious “Условие”
где
FindFirst / FindLast / FindNext / FindPrevious - один из методов поиска Найти первую / Найти последнюю / Найти следующую / Найти предыдущу.
“Условие” - условие в текстовом формате составленная по следующему принципу:
[Имя поля] Отношение Условие
Как видно имена полей берутся в квадратные скобки, об “Отношение” смотрите выше по тексту в описании метода seek. Если поле текстовое, то условие берется в двойные кавычки ( “ ) или в апострофы ( ‘ ). Допускается использование в условие логических функций (Not, And, Or ) и скобок.
После применения методов поиска используют логическое свойство NoMatch объекта типа Recordset, которое имеет значение True – если запись не найдена, и False – в противном случаи.
Пример использования метода Seek
Возьмите за основу форму, которую мы описали в разделе данной главы книги Форма для интерактивной работы с записью таблицы базы данных. Весь программный код той формы нужно будет использовать, мы в данном параграфе укажем только дополнительный программный код, предназначенный для работы новых элементов управления. Как видно из рис. 29 на форму добавлена рамка с подписью Frame1, на которой расположены необходимые элементы управления для поиска:
Рис. 29 Форма для поиска записи по условию
Следующий программный код обеспечивает работу новых элементов управления:
Private Sub ComboBox1_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If ComboBox1.ListCount = 0 Then
Dim i As Long
ComboBox1.Clear
For i = 0 To r.Fields.Count - 1
On Error Resume Next
'проверяем индексированоли поле
r.Index = r.Fields(i).Name
'Ошибок нет, поле индексированое
If Err.Number = 0 Then
ComboBox1.AddItem r.Fields(i).Name
End If
Next i
End If
End Sub
Private Sub ComboBox1_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If ComboBox1.ListCount = 0 Then
MsgBox "В таблице нет индексированных полей, поиск невозможен!"
Frame1.Visible = False
Me.Width = Me.Width - Frame1.Width
End If
End Sub
Private Sub ComboBox2_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If ComboBox2.ListCount = 0 Then
ComboBox2.Clear
ComboBox2.AddItem "= Равно"
ComboBox2.AddItem "<> Неравно"
ComboBox2.AddItem "> Больше"
ComboBox2.AddItem "< Меньше"
ComboBox2.AddItem ">= Больше либо равно"
ComboBox2.AddItem "<= Меньше либо равно"
End If
End Sub
Private Function Поиск() As Boolean
If ComboBox1.ListIndex >= 0 Then
Dim s As String
r.Index = ComboBox1.Text
s = "="
If ComboBox2.ListIndex < 0 Then
ComboBox2.Text = "= Равно"
Else
s = Trim(Mid(ComboBox2.List(ComboBox2.ListIndex), 1, 2))
End If
Err.Clear
On Error Resume Next
r.Seek s, Search1.Text
If Err.Number <> 0 Then
Поиск = False
MsgBox "Введен неверный тип данных для выбранного поля!"
ElseIf r.NoMatch Then
Поиск = False
MsgBox "Не найдено!"
Else
Поиск = True
End If
Else
Поиск = False
MsgBox "Сначало надо выбрать имя поля для поиска"
End If
End Function
'Поиск
Private Sub CommandButton3_Click()
If Поиск = True Then
LabelRecord.Caption = "Найдена запись без ее порядкового номера"
'запрещаем обновление данных в указателях
flag = True
'Обновляем поля ввода из текущей записи
ОбновитьПолеВвода TextBox1, 0
ОбновитьПолеВвода TextBox2, 1
ОбновитьПолеВвода CheckBox1, 2
'разрешаем обновление данных в указателях
flag = False
Else
ScrollBar1_Change
End If
End Sub
'Поиск (и поиск № записи)
Private Sub CommandButton4_Click()
If Поиск = True Then
Dim i As Long
'поиск номера записи
i = -1
While Not r.BOF
r.MovePrevious
i = i + 1
Wend
ScrollBar1.Value = i
ScrollBar1_Change
End If
End Sub