Руководства, Инструкции, Бланки

Руководство По Vba Для Access img-1

Руководство По Vba Для Access

Рейтинг: 4.4/5.0 (1786 проголосовавших)

Категория: Руководства

Описание

Руководство по vba для access

VBA. Наиболее полное руководство - Рассмотрены многочисленные средства и возможности языка VBA для повышения гибкости и расширения функциональности офисных приложений Excel, Word, Access, PowerPoint и Outlook. Описан синтаксис языка и даны практические рекомендации по объектно-ориентированному программированию. Показано, как автоматизировать анализ и обработку данных, решать оптимизационные задачи и строить стандартные и нестандартные диаграммы в Excel; как работать со стилями, шаблонами и формами в Word; как создавать интерактивные средства по работе с базами данных в Access. Большое внимание уделено конструированию пользовательского интерфейса как на этапе дизайна, так и во время выполнения приложения. Рассмотрены вопросы взаимодействия офисных приложений между собой, а также их интеграция в .NET-проекты. Показано, как подсоединить к приложениям Web-ресурсы с помощью Web-служб и Web-запросов. Книга содержит около 500 тщательно разработанных примеров, которые могут быть использованы для создания собственных приложений.
Для пользователей и программистов.

Название: VBA. Наиболее полное руководство
Автор: Андрей Гарнаев
Издательство: БХВ-Петербург
Год: 2005
Страниц: 825
Формат: PDF
Размер: 18,1 МБ
ISBN: 5-94157-633-1
Качество: Отличное
Серия или Выпуск: В подлиннике
Язык: Русский

Предисловие
Глава 1. Введение в VBA
Глава 2. Интегрированная среда разработки
Глава 3. Элементы ООП в VBA
Глава 4. Работа со строками, временем и датами
Глава 5. VBA и MS Excel
Глава 6. Формы и элементы управления
Глава 7. Создание меню, контекстного меню и панели инструментов
Глава 8. Диаграммы
Глава 9. Помощник MS Office
Глава 10. Работа с файлами
Глава 11. Обработка ошибок и отладка программ
Глава 12. VBA и Win32 API
Глава 13. Обработка данных
Глава 14. VBA и MS Word
Глава 15. VBA и Automation
Глава 16. ActiveX Data Objects
Глава 17. VBA и MS Access
Глава 18. VBA и Web
Глава 19. VBA и Windows-сценарии
Глава 20. Microsoft Visual Studio Tools для MS Office
Глава 21. VBA и XML
Глава 22. VBA и .NET
Глава 23. Смарт-теги
Приложения
Приложение 1. Основы программирования на VBA
Приложение 2. VBA и игры
Предметный указатель

Скачать VBA. Наиболее полное руководство

Другие статьи

Программирование на VBA в СУБД Access 2003

Программирование на VBA в СУБД Access 2003 Основные сведения о системе программирования VBA

Небольшую и несложную базу данных или приложение Access можно создать в СУБД Access без использования языков программирования SQL и Visual Basic. В СУБД Access имеется достаточно средств (различных мастеров и конструкторов) для визуального проектирования таблиц, запросов, форм и отчетов. При этом в качестве средства для отыскания необходимой информации в базе данных Access можно использовать QBE - запрос по образцу, а не язык запросов SQL.

Для решения некоторых задач автоматизации приложений Access можно использовать макросы вместо языка программирования Visual Basic (например, при создании главной и подчиненной кнопочной формы БД ). Но создание коммерческих баз данных в СУБД Access невозможно без применения визуального языка программирования Visual Basic и языка запросов SQL.

Для автоматизации действий над объектами в Microsoft Access и в других приложениях Microsoft Office применяются макросы и модули. Макросы - это небольшие программы на языке макрокоманд (языке сценариев). Модули - это наборы описаний и процедур на языке программирования VB для приложений, т.е. модули - это объекты, содержащие программы на языке Visual Basic.

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

Программирование на VBA в приложениях Word, Excel, PowerPoint обычно применяют пользователи для автоматизации своей деятельности, связанной с обработкой документов. Использование языка программирования VBA для создания функций пользователя в Excel рассмотрено в разделе Основы офисного программирования . Программирование на VBA в СУБД Access используют в основном разработчики (программисты) в процессе создания приложений (различных баз данных, БД), с которыми работают пользователи.

Для программирования в Access используется не приложение Visual Basic, а встроенная в Microsoft Office система программирования Visual Basic for Applications (VBA - Visual Basic для приложений). Система программирования VBA является неотъемлемой частью приложений Microsoft Office и предназначена для визуального программирования в таких приложениях как Word, Excel, PowerPoint, Access и т.д. В VBA языком программирования является VB, а инструментальная среда программирования реализована в виде редактора VB, который может активизироваться из любого приложения MS Office. Редактор Visual Basic является отдельным приложением, поэтому можно переключаться между приложениями Microsoft Office и редактором Visual Basic клавишами "Alt+F11".

Система программирования VBA предназначена для написания кода программ модулей. которые хранят текст этих программ. Модуль - это совокупность описаний, инструкций и процедур, сохраненных под общим именем. В Access существует два типа модулей: стандартные модули и модули класса. Основное содержание модулей — это процедуры на языке VBA. Процедура - совокупность описаний и инструкций в модуле, которые выполняются как одна программная единица. В VBA существуют процедуры-подпрограммы Sub и процедуры- функции Function.

Стандартные модули содержат общие процедуры, которые не связаны с конкретным объектом (формой, отчетом). Стандартный модуль - это модуль, в который помещают процедуры Sub и Function, которые должны быть доступны для всех процедур в данном приложении. Стандартные модули могут использоваться другими приложениями Access, так как в общих процедурах нет ссылок на конкретные объекты данного приложения (формы, отчеты). Кроме общих процедур, в стандартных модулях могут содержаться глобальные переменные и функции, а также объекты, которые доступные из других объектов базы данных.

Модуль класса отличается от стандартного модуля тем, что, кроме процедур, он содержит описание объекта и используется для создания классов (объектов). Отдельные модули класса, расположенные на вкладке Модули окна базы данных, содержат описание класса (объекта), созданного пользователем. К модулям класса также относятся модули объектов (форм, отчетов), которые связаны с конкретными формами или отчетами и содержат процедуры обработки событий форм (отчетов) и их элементов управления.

Модуль объекта (формы, отчета) - это модуль класса, содержащий программы всех процедур обработки событий, возникающих в конкретном объекте (форме, отчете) или в его элементах управления. Все процедуры событий для формы или отчета хранятся в модуле объекта (формы или отчета). Вновь созданная форма (отчет) не содержит модулей, но их можно создать несколькими способами. Таким образом, формы или отчеты связаны с созданными модулями объектов (форм, отчетов). Если процедура используется только формой или отчетом, то она хранится в коде формы или отчета. Если процедура используется в во многих формах и отчетах, то она сохраняется в отдельном модуле.

Первый способ создания пустого модуля: выбрать "Да" в поле наличия модуля на вкладке "Все" в окне диалога Форма или Отчет. Окно диалога вызывается командой "Свойства" из контекстного меню, находясь в конструкторе форм или отчетов.


Другой способ создания модуля выполняется кнопкой "Программа" на панели инструментов в режиме конструктора форм или отчетов. Если щелкнуть мышью на кнопке Программа, то запуститься редактор VB, в котором мы можем вводить текст программы соответствующего модуля.


Третий способ осуществляется путем обработки некоторых событий связанных с формой или каким-либо элементом управления формы, находясь в режиме Конструктора форм или отчетов. Для этого необходимо открыть окно редактора Visual Basic, щелкнув на команду "Программы" в Построителе. Построитель вызывается командой "Обработка событий" из контекстного меню объекта, например кнопки.


Для просмотра модулей класса, которые связаны с конкретными формами или отчетами и содержатся в модулях объектов, надо выделить форму или отчет в окне базы данных на вкладке формы или отчеты и щелкнуть на пиктограмме Программа на панели инструментов в главном окне Microsoft Access.

Чтобы создать отдельный модуль класса или стандартный модуль, надо выбрать пункт Модуль класса или Модуль в меню Вставка. Стандартный модуль можно создать, например, путем преобразования макроса. Модули отображаются в окне базы данных на вкладке Модули. На рисунке представлено окно базы данных Access (на вкладке Модули) в нем находятся модули объектов, три стандартных модуля и один модуль класса.

Для просмотра процедуры в стандартном модуле или в модуле класса надо выделить требуемый модуль в окне базы данных на вкладке Модули и щелкнуть на пиктограмме Программа на панели инструментов в главном окне Microsoft Access или щелкнуть на кнопке Конструктор в окне базы данных. Откроется редактор Visual Basic, на панели редактора кода которого отображаются процедуры.

В СУБД Access объектами являются таблицы, формы, запросы, окна, меню, кнопки, линии прокруток и т.д. в том числе и приложение Access. Для каждого объекта определены возможные события. Некоторые события возникают от действия пользователей (щелчков мыши, нажатия клавиш клавиатуры и др.), а другая часть событий происходят в результате свершения других событий, например открытия окна. Каждое событие проявляется в определенных действиях программы.

Существует две группы действий на события. Действия первой группы определены свойствами объекта, и их изменить в процессе программирования на VBA нельзя. Эти свойства устанавливаются ОС Windows и системой программирования VBA. Примером может быть свертывание окна при щелчке на кнопке Свернуть. Вторая группа действий (отклика ) на события определяется программистом. Для этой группы действий программист может создать процедуры VBA для каждого возможного события, но на практике программист заполняет кодом процедуры только для тех событий, которые требуются для данного приложения Access.

Подпишитесь на мою рассылку СУБД MS Access 2003 -это просто!
Поделись с друзьями

Программирование на VBA в Access

/ Лабораторный практикум в Access / Лабораторный практикум в Access / Программирование на VBA в Access

Для явного описания переменной используется оператор Dim.

Dim <имя переменной> As <тип переменной>.

Например, Dim i As Integer, j As Integer Dim x As Double

Строки могут быть постоянной и переменной длины. Оператор Dim <имя переменной> As Stringобъявляет строку переменной длины, а оператор Dim <имя переменной>AsString*<количество символов> - фиксированной длины. Например:

Можно ввести требование, чтобы все переменные были описаны явно. Для этого в разделе описаний модуля необходимо задать декларацию Option Explicit. Тогда Access будет автоматически обнаруживать ошибки в написании имен переменных и контролировать совпадение типа переменной и назначаемых ей значений.

Переменные имеют определенную область видимости. Существует четыре уровня видимости:

Локальный уровень или уровень процедуры. Переменные существуют только внутри процедуры, где они описаны и используются;

Уровень формы (отчета). Переменные описываются в разделе описаний модуля формы (отчета) и являются доступными только для процедур этой формы (отчета) в то время, когда форма (отчет) открыта;

Уровень модуля. Переменные описываются в разделе описаний стандартного модуля и доступны для всех процедур модуля при открытой БД;

Глобальный уровень. Переменная записывается в разделе описаний модуля при помощи инструкций Public или Global.

Если попытаться использовать неявно заданную переменную в то время, когда она недоступна, то Access взамен ее создаст новую переменную с тем же именем, что может привести к трудно обнаруживаемым логическим ошибкам. Это может служить дополнительным поводом для явного задания всех переменных.

Все переменные имеют определенное время жизни. Для локальных переменных время жизни определяется временем использования кода. Каждый раз при новом вызове процедуры переменной приписывается либо Null. либо 0, либо пустая строка в зависимости от типа. Для создания переменных со временем жизни, равным времени жизни приложения, используется инструкция Static. Тем не менее, статическая переменная не может быть использована в других процедурах. Изменяется лишь время ее жизни, а не область видимости. Если произойдет повторный вызов той же самой процедуры, в которой была описана статическая переменная, то эта переменная сохранит свое прежнее значение, которое она имела в момент завершения работы этой процедуры при предыдущем вызове. Все переменные в определенной процедуре будут статическими, если перед самой процедурой поставить инструкцию Static.

C помощью ключевого слова Dim также можно определять многомерные массивы. Размерность и число элементов массива определяется внутри скобок после имени переменной. Например:

Dim myArray(20) As String*10

Dim myArray(5, 5) As Double или Dim myArray(3, 3, 3) As Double

Нумерация элементов массива начинается с 0, поэтому для первого примера будет зарезервирована память для массива, состоящего из 21 элемента, для второго – 6 на 6. При объявлении массива можно определять не только верхнюю границу массива, но и нижнюю. Например, Dim my Array(1 то 20) As String.

В VBA допускается использование динамических массивов. Для этого при описании переменной число элементов массива опускается, а затем применяется инструкция ReDim для объявления реального размера массива. При этом все элементы массива обнуляются. Для сохранения значений элементов массива применяется инструкция Preserve.

Dim dynArray( ) As Double

ReDim Preserve dynArray (5, 2, 4)

Во время выполнения программы нижнюю и верхнюю границы массива можно определить с помощью функций LBound() и UBound() соответственно. Удалить массив из памяти можно с помощью оператора Erase.

Константы в VBA описываются с помощью ключевого слова Const. Вместе с объявлением константы также необходимо произвести ее инициализацию.

Const pi As Double = 3.1415

Кроме переменных вышеприведенных типов в VBA можно задавать объектные переменные, применяющиеся для хранения ссылок на объекты Access. Для каждой коллекции основных объектов в Access имеется соответствующий ей объектный тип, а также общий тип Object, принимающих ссылки на любые объекты. Например:

Dim myObjectAsObject– переменная любого объектного типа,

Dim myControl As Control – переменная типа элемента управления,

Dim myForm As Form – переменная типа формы.

Присваивать конкретные значения объектным переменным можно с помощью инструкции Set.

Set myForm = Forms![Моя Форма].

Пользователь может также создавать свой тип данных на основе существующих. Пользовательский тип данных вводится между ключевыми словами Type…End Type.

number As String*15

Обращение к полю пользовательского типа производится через операцию “.”.

Заполнить объектные переменные, содержащие много свойств, а также переменные пользовательского типа данных можно с помощью инструкции With … End With.

Dim myForm As Form

Set myForm = Forms![Имя формы]

Создание комментариев. Любой текст, следующий за символом ‘, воспринимается как комментарий.

Процедуры и функции. Основными компонентами программ на VBA являются процедуры и функции. Они представляют собой фрагменты программного кода, заключенные между операторами Sub и End Sub или между Function и End Function. В общем случае процедуры и функции записываются следующим образом:

Sub <имя процедуры< [(<аргументы>)]

Function <имя функции> [(<аргументы>)] As <тип возвращаемого значения>

<имя функции> = <возвращаемое значение>

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

Допускается два различных способа передачи переменных процедуре или функции: по ссылке или по значению. По умолчанию переменные передаются по ссылке (объявление ByRef). При изменении значения переменной внутри процедуры это изменение остается и при выходе из этой процедуры. Переменные можно передавать и по значению. Тогда изменение значения такой переменной не будет воздействовать на значение переменной, переданной в процедуру или функцию. Для этого используют объявление ByVal. В общем виде объявление аргументов производится следующим образом BуVal/ByRef <имя аргумента> [( )] [As <тun>]. Например:

Sub mySyb(srteet As String, ByVal building As Integer, ByRef apt As Byte)

Forms![Клиенты]![Адресс] = srteet & " " & building & ", " & apt

Function myFunc(full_price As Currency, shipment As Single) As Currency

myFunc = full_price * 1.2 + shipment

Для принудительного выхода из процедуры и функции используются соответственно ExitSubиExitFunction.

Управление выполнением программы. Управление выполнением программы достигается за счет оператора безусловного перехода, операторов ветвления (условных операторов) и циклов. Условные операторы выполняют группу команд в зависимости от условия. К ним относится оператор If и Select Case. В простейшем виде оператор If можно записать в одну строку.

If <условие> Then <оператор>

Более сложный вариант использования оператора If приведен ниже:

If <условие> Then

Для задания выбора действий на основе проверки целой группы условий используется расширенный вариант записи оператора If.

If <условие> Then

Else If <условие 2> Then

Если выбор действий зависит от различных значений одного и того же выражения, то вместо вложенного оператора If предпочтительнее использовать оператор Select Case … End Select. Этот оператор определяет, является ли выражение истинным, а также оценивает, заключены ли в определенных пределах значения этого выражения.

Select Case <имя переменной>

Case <выражение 1> [. <выражение 2>, …]

(операторы, выполняемые, если значения переменной удовлетворяют или выражение 1, или выражение 2, или …)

[Case <выражение 3> To <выражение 4>]

(операторы, выполняемые, если значение переменной находится в диапазоне, определяемом выражениями 3 и 4)

[Case Is <выражение отношения>]

(операторы, выполняемые, если значение переменной удовлетворяет выражению отношения.)

(операторы, выполняемые, если не было выполнено ни одно из вышеперечисленных условий)

Любой строке в программе на VBA можно присвоить метку Метка. Перейти на эту строку программы можно с помощью оператора безусловного перехода GoTo <метка>. Однако операторы GoTo нарушают стиль структурного программирования, и они применяются только для обработки ошибок в приложении.

Операторы цикла в VBA различаются на две основные группы: циклы с перечислением (For … Next) и циклы с условием (Do … Loop).

Оператор For…Next повторяет тело цикла заданное число раз.

For <счетчик> = <начальное значение> To <конечное значение> [Step <приращение>]

Для выхода из цикла используется оператор Exit For.

Операторы циклов Do While … Loop, While … Wend являются синонимами. While … Wend оставлен для совместимости со старыми версиями. Эти операторы повторяют тело цикла, пока условие принимает значение True.

Do While <условие [=True]>

Оператор Do Until … Loop выполняет тело цикла до тех пор, пока не будет выполнено условие

Do Until <условие [< > True]>

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

Loop While <условие [=True]>

Loop Until <условие [=False]>

Для выхода из этих циклов используется оператор Exit Do.

Для построения цикла по всем элементам массива или коллекции используется инструкция For Each

For Each <элемент> In <коллекция>

где <элемент> – это переменная, используемая для ссылки на элементы семейства объектов. Следующий пример заполнит выпадающий список элемента управления ПолеСоСписком1 названиями всех элементов управления, расположенных в форме

Dim ctrl As Control

For Each ctrl In Form

Обработка ошибок на этапе выполнения

Как бы тщательно не проверялся код, на этапе его выполнения неизбежно возникают ошибки. Попытка деления на ноль – это типичный пример ошибки времени выполнения. В Access обработка ошибок выполняется с помощью инструкции On Error. Имеется три вида инструкций On Error:

On Error GoTo Метка – осуществляет переход на строку с меткой (Метка) при возникновении произвольной ошибки на этапе выполнения. После обработки ошибки можно либо вызвать повторение той части кода, где произошла ошибка, либо проигнорировать ошибку и продолжить выполнение последующих инструкций. Для возвращения на строку с ошибкой используется ключевое слово Resume.

On Error Resume Next – игнорирует ошибку и продолжает выполнение последующих инструкций.

On Error GoTo 0 – отключает обработку ошибок.

После обработки первой ошибки инструкция On Error GoTo Метка продолжает выполняться для всех последующих ошибок, пока не закончится выполнение данной процедуры либо обработка ошибок не будет явно отключена инструкцией On Error GoTo 0. Если нет обработки какой-то ошибки или обработка выключена, то при возникновении необработанной ошибки приложение сразу же выдаст сообщение об ошибке и прекратит работу.

Если процедура обработки некоторого события создается с помощью мастера, то он автоматически дополняет процедуру кодом обработки ошибок.

Private Sub MyID_DblClick(Cancel As Integer)

On Error GoTo Err_MyID_DblClick

Объект Err содержит информацию об ошибках выполнения и обычно используется вместе со структурой Select Case, чтобы определить, какое действие предпринять в зависимости от кода ошибки.

Select Case Err

Call FileError- процедура обработки ошибок работы с файлами

Case 281 To 297

Call DDEError - процедура для обработки ошибок DDE

Case 340 To 344

Call ArrayError - процедура ошибок массивов

Err=0 - отключение обработки необработанных ошибок.

Работа с объектами и коллекциями

В VBA можно работать с объектами и коллекциями Access, библиотекой доступа к данным DAO (Data Access Objects), библиотекой прямого доступа к данным баз данных ODBC (ODBC Direct), библиотекой доступа к данным ADO (ActiveX Data Objects) и другими библиотеками. В Access, DAO и ADO все объекты расположены внутри коллекций и доступны в VBA. Каждый объект имеет свойства и методы. Все библиотеки организованы в виде иерархии объектов. Объекты имеют коллекции (семейства) подчиненных объектов и т.д. В Access имеется восемь базовых объектов; их иерархия представлена на Рис. 1.

Объекты MS Access:

Application – активное приложение;

Control – элемент управления;

DoCmd – объект вызова макрокоманд в VBA коде;

Form – открытая форма;

Module – объект, ссылающийся на стандартные модули;

Reference – объект, содержащий ссылки на объекты;

Report – открытый отчет;

Screen – ссылка на экран;

Названия семейств формируются путем возведения в множественное число названия соответствующего объекта. В свою очередь большинство объектов имеют присоединенные коллекции свойств (Properties), а формы и отчеты – коллекции разделов и т.д. Так как все объекты в Access хранятся внутри иерархически связанных коллекций, то доступ к объекту на нижней ступени иерархии можно получить, указав все имена коллекций, разделенных точкой, начиная от корневого объекта. Например, Application.Forms("Заказы").Controls(0).Properties(0). Большинство коллекций, к примеру, коллекции форм и отчетов, являются глобальными. Тогда к объекту этой коллекции можно обращаться напрямую: Forms("Заказы") или Forms!Заказы.

Рис. 1. Иерархия объектовAccess

Поскольку библиотека DAO всегда поставляется с Access, рассмотрим ее структуру и основные методы более подробно (Рис. 2).

Объекты библиотеки DAO:

Database – открытая база данных;

DBEngine – ссылка на Microsoft Jet (ядро БД);

Error – объект ошибок;

Field – поле в таблицах, запросах, динамических наборах и т.д.;

Parameter – параметр запроса;

QueryDef – сохранённый запрос;

Recordset – динамический набор данных;

Relation – связь между таблицами;

TableDef – сохраненная таблица;

Workspace – активная сессия.

Рис. 2. Иерархия объектовDAO

В программах на VBA имеется набор свойств объектов, которые возвращают ссылки на подчиненные объекты:

Me – ссылка на активную форму или отчет (доступна в присоединенном модуле);

ActiveControl – ссылка на активный элемент управления;

ActiveForm – ссылка на активную форму (доступна в объекте Screen);

ActiveReport – ссылка на активный отчет (доступна в объекте Screen);

Application – ссылка на открытое приложение;

Parent – ссылка на родительский объект, то есть на коллекцию;

DBEngine – возвращает ссылку на Application.

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

Me![Полная цена] =Me![Цена] *Me![Количество]

Me.Filter= "[Адрес]Like'*" &Me![ПолеУсловияПоиска] & "*'"

Если есть желание читать и менять данные в некотором поле базового набора, но не видеть его на экране, то достаточно поместить элемент управления Поле на форму и задать свойствоVisibleвFalse. Но прямой доступ к базовому набору вAccessневозможен. Можно лишь создать динамическую копию базового набора и синхронизировать все производимые действия с ней с базовым набором самой формы. Для прямого доступа к записям и полям используется объект Recordset. Имеются четыре типа Recordset объектов –table ,dynaset ,snapshot иforwarrd-only :

Table. Может быть создан только на основе существующей или присоединенной таблицы. Предоставляет доступ ко всем методам и свойствам таблицы, а также к индексам, что дает намного более быстрый метод поиска (метод Seek);

Dynaset - может быть создан на основе таблицы или запроса. Позволяет обновлять данные в многотабличных запросах и в запросах к внешним БД. ОбновлениеDynaset объекта приводит к автоматическому обновлению всех участвующих в нем таблиц;

Snapshot - создает статическую копию и существует только в то время, когда он создан. Последующие изменения таблиц на него не воздействуют;

Forward-only создает статическую копию с просмотром только в прямом порядке.

Для создания объекта типа Recordset используется метод OpenRecordset:

Set variable = database.OpenRecodset (source [type, options, lockedits]), или

Set variable = object.OpenRecodset ( [type, options, lockedits]),

где database – это переменная типа Database; object – переменная типа TableDef или QueryDef; source – ссылка на объект типа TableDef или QueryDef; type – тип динамического набора (может принимать следующие значения: dbOpenTable, dbOpenDynaset, dbOpenSnspshot dbOpenForwardOnly); options может принимать следующие значения: dbAppendOnly, dbReadOnly, dbForwardOnly, …; lockedits – аргумент, определяющий разрешение конфликтов в многопользовательских БД (может принимать следующие значения: DbReadOnly, dbPessimistic, dbOptimistic). Например:

Dim db As Database

Dim rst As Recordset

Set db = CurrentDb()

Set rst = db.OpenRecordset("Клиенты", dbOpenDynaset)

Открыть Recordset можно и основываясь на переменной типа формы (допустим только для форм, основанных на таблице или запросе) с помощью метода RecordsetClone. Метод RecordsetClone создает динамический набор, основываясь на свойстве Источник данных для формы

Dim rstOrders As Recordset

Set rstOrders = Forms![Заказы].RecordsetClone

или просто Me.RecordsetClone

Recordset можно создать, также основываясь на строке SQL

Set rst = db.OpenRecordset("SELECT * FROM Товары WHERE Цена > 1000", dbOpenDynaset, dbReadOnly)

После завершения работы с динамическим набором его необходимо закрыть. Существуют два общих способа закрытия объектов в VBA. Первый заключается в вызове метода Close, второй – в присвоении соответствующей объектной переменной значения Nothing. Например, rst.Close или Set rst = Nothing.

Recordset имеет текущее приложение – current position. Для синхронизации текущего положения динамического набора с текущей записью формы можно использовать свойствоBookmark(необходимо всегда помнить, что при обращении к динамическому набору данные берутся именно из текущей записи). Для перемещения по динамическому набору имеется ряд методов:MoveFirst,MoseLast,MoveNext,MovePrevions,Move[n]. Например:

Dim rst As Recordset

Set rst = Me.RecordsetClone

Для определения начала и конца набора можно использовать свойства BOF (before of file – начало файла) и EOF (end of file – конец файла). Если в наборе нет записей, то BOF и EOF равны True. Если в наборе есть записи, то при открытии набора курсор обычно устанавливается на первой записи и BOF и EOF = False. Если курсор находится перед первой записью набора, то BOF = True, и если курсор находится после последней записи, то EOF = True.

Число записей в динамическим наборе можно получить с помощью свойства RecordCount. Это свойство возвращает реальное число записей только для динамического набора, основанного на таблице, то есть имеющего тип dbOpenTable. После открытия динамических наборов любых других типов число записей в нем будет неизвестно до тех пор, пока курсор не будет перемещен на последнюю запись. Для непосредственной проверки на наличие в наборе записей лучше проверить свойство EOF. Если EOF будет равно True, то RecordCount также будет равен 0.

Public Function RecCount() As Long

Dim rstCount As Recordset

Dim dbs As Database

Set dbs = CurrentDB()

Set rstCont = dbs.OpenRecordset("Заказы")

If rstCount.Eof Then

Set dbs = Nothing

Поиск определенной записи. Для наборов, основанных на таблице, можно использовать метод Seek, который ищет запись, основываясь на сравнении данных некоторого индекса с заданными значениями (самый быстрый метод). Для примера запишем программу, которая будет проверять дублирование значений ключевого поля таблицыКлиенты перед сохранением записи. Для проверки результатов поиска в объекте Recordset имеется свойство NoMatch. Если NoMatch равно False, то запись с заданными условиями поиска отсутствует в наборе.

Dim rst As Recordset

Set rst = CurrentDb.OpenRecordset("Клиенты", dbOpenTable)

If Not rst.NoMatch Then

MsgBox "Клинт с таким табельным номером уже существует в базе"

Метод Seek всегда начинает поиск с начала набора, поэтому поиск по одному и тому же условию будет всегда приводить к одной и той же записи. Для поиска по динамическим наборам остальных типов можно применять также методы FindFirst, FindLast, FindNext и FindPrevions. Например, подсчитаем количество заказов определенного клиента:

rstOrders.FindFirst "КодКлиента=" & Me![КодКлиента]

Do While rstOrders.NoMatch

rstOrders.FindNext "КодКлиента=" & Me![КодКлиента]

intCount = intCount + 1

Для поиска записей можно также применять сортировку и фильтрацию. Для сортировки записей лучше всего открыть новый динамический набор, основанный на запросе SQL с оператором ORDER BY. Для фильтрации можно задать свойство Filter объекта Recordset и затем обновить набор с помощью метода OpenRecordset. Ниже приведен текст программы, осуществляющей фильтрацию произвольного набора:

rstTemp.Filter = strField & " = '" & strFilter & "'"

Set FilterField = rstTemp.OpenRecordset

Обновление динамических наборов. Обновление данных возможно только при работе с динамическими наборами типов dbOpenTable и dbOpenDynaset. Для редактирования некоторой записи необходимо вначале установить курсор на ней, перевести динамический набор в режим редактирования (метод Edit), а затем сохранить изменения с помощью метода Update.

rst![Товар] = "Pentium 100"

Метод Cancelотменяет внесенные изменения. Для удаления текущей записи существует метод Delete. Этот метод удаляет запись без выдачи каких-либо предупреждений и не меняет положения курсора. Для перехода на следующую запись необходимо вызвать метод MoveNext. Для добавления новой записи служит метод AddNew. После заполнения новой записи значениями ее необходимо сохранить с помощью метода Update, потому как если после добавления новой записи перейти к другой записи без сохранения или просто закрыть динамический набор, то добавляемая запись будет потеряна. Следующий пример изменяет значения полейЦена иКоличество таблицыЗаказы. отфильтрованной для определенного клиента.

Dim rst As Recordset

Dim dbs As Database

Set dbs = CurrentDb()

Set rst = dbs.OpenRecordset("Заказы", dbOpenDynaset)

rst.Filter= "[КодКлиента]=" &Me![Код клиента]

Set rst = rst.OpenRecordset

If Not rst.EOF Then

[Цена] = rst![Цена] * 1.2

VBA - программирование в access

VBA - программирование в access

Рассказывая о запросах в MS Access. я уже упомянул, что написание программ на VBA позволяет:

  • сделать базу данных "динамичной";
  • уменьшить размер базы данных (программирование позволит не создавать дополнительные объекты);
  • обращаться к архивным данным в другие файлы или другие базы данных (т.е. подставлять в форму или в отчет такие данные).

Программирование на VBA - это то, на что стоит обратить пристальное внимание. Изучите и освойте VBA, прежде чем торопиться "клонировать" объекты (запросы, формы, отчеты на каждое новое условие - по годам, по критериям (полям) и т.п.).

При программировании в VBA вам часто придется отлаживать куски кода и пользоваться справкой. Для отладки программы, прежде чем выводить реальные данные, стоит прогнать программу на предмет логики, для чего надо использовать приемы отладки (в частности, Debug.Print ).

Ctrl + G - вызов окна проверки

Даже если у вас не написано еще ни одной строчки программы на VBA, нажатие клавиш Ctrl+G позволит открыть окно проверки и исполнить там любую функцию MS Access (посмотрите пример вызова окна отладки программ ).

Bittorrent17: Дневник

Access Руководство По Vba

Access Руководство По Vba

The information in this manual has been carefully checked and is believed to be accurate. Customising RE:Anywhere for Remote Access Using VBA.

Краткое руководство ". СУБД Microsoft Office Access, входящей в пакет программ Microsoft Office. Приложение Б. Элементы языка VBA 247.

krvsa Member Откуда: г Волжский Сообщений: 11694 Помогите с учебниками по VBA применительно к MS Access. Дайте ссылочки откуда можно скачать. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT 25 дек 07, 15:30 [5094363] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] RaskolNik Member Откуда: Россия. Провинциальный колхоз Сообщений: 22685 krvsa Помогите с учебниками по VBA применительно к MS Access. Дайте ссылочки откуда можно скачать. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT Лучшая ссылка это поиск на этом форуме Ткни 25 дек 07, 17:01 [5095219] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] Программист-Любитель Member Откуда: Сообщений: 16798 ФЫ1 MSDN 25 дек 07, 22:24 [5096317] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] krvsa Member Откуда: г Волжский Сообщений: 11694 Программист-Любитель, MSDN и F1 это не учебники. RaskolNik, все это конечно хорошо. Но стараюсь не для себя - для супруги. Но могу только успеть/смоч скачать какие-то книжки по каким-то ссылкам. То, что предложил ты слишком обще. Тем, кому моя просьба слишком обременительна - не напрягайтесь. Может помогут другие. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT 26 дек 07, 12:00 [5097890] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] Старый юнга Member Откуда: Бахча Сообщений: 422 Попробуй www.basoft.gomel.by, есть много решений и учебников. 26 дек 07, 12:06 [5097945] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] Palarm Member Откуда: Сообщений: 1253 Тогда уж лучше сюда литература по access Там даже есть книжки, которые до 16 нельзя. 26 дек 07, 12:10 [5097971] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] krvsa Member Откуда: г Волжский Сообщений: 11694 Спасибо, посмотрю. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT 26 дек 07, 13:00 [5098347] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] Программист-Любитель Member Откуда: Сообщений: 16798 В ФЫ1 есть оглавление. Из него легко попасть в подробные руководства программиста и справочники по Access/DAO/ADO. 26 дек 07, 13:42 [5098632] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] krvsa Member Откуда: г Волжский Сообщений: 11694 Программист-Любитель, ты такой настойчивый. Но мне не нужны руководства (даже подробные) и темболее справочники. Мне нужны учебники. Улавливаеш разницу? ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT 26 дек 07, 14:09 [5098882] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] osmor Member Откуда: hiprog.com Сообщений: 1170 сообщение возможно не в тему. но хочется предупредить. Примеры скаченные с www.basoft.gomel.by содержат код без предупреждения подменяющий стартовую страницу IE. Еще я меня при установке скачанного от туда "руководство на русском языке по функциям API" (это кстати версия от 2000 года), попытался запихнуть какую-то дрянь в system32 о чем мне сообщил антитроян, антивирус ее НЕ определил как вирус, но учитывая подмену стартовой страницы доверия к этому сайту нет. так что будьте осторожны. 26 дек 07, 17:30 [5100370] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] Mifus Member Откуда: Сообщений: 150 Зря вы так. Ф1 очень хороший учебник ;) А ваще я бы посоветовал "Интенсивный курс программирования в Access 2003 за выходные" конечно за выходные вы качественно программировать по этой книге не научитесь, но зато она богата примерами и написна очень доступным и понятным языком 14 янв 09, 03:19 [6681926] Ответить | Цитировать Сообщить модератору Re: Помогите с учебниками по VBA применительно к MS Access [new] Уважающий ВсехВас Member Откуда: Сообщений: 505 [quot krvsa]Помогите с учебниками по VBA применительно к MS Access. Дайте ссылочки откуда можно скачать. ---------- У меня есть два тома. Пол Литвин,Кен Гетц,Майк Гульберт Аccess 2000 Руководство разработчика. На этом и других форумах на них ссылаются так:" У Гетца. ". В бумажном варианте.Плюс CD. Моя "аська":375-836-694 14 янв 09, 08:48 [6682090] Ответить | Цитировать Сообщить модератору

Программирование MsAccess, VB, VBA

Помогите с учебниками по VBA применительно к MS Access / Microsoft руководства программиста и справочники по Access /DAO/ADO.

Categoria: Manual VBA. Escrito por Neckkito. Aqui teneis un curso de VBA pensado para trabajar sobre Access. Es decir, que el curso esta VBAAccess ideado.

Как это делается в Word, Excel, Access DOC PDF TXT XLS на VBA в одной из гимназий Санкт-Петербурга. Программа обучения была новой и Есть описание работы с компилятором Visual Basic 6, который встроен в продукты.

Книга об MS Access - Первоисточник этой книги, к сожалению мне не Руководство по функциям VBA - данное руководство является.

Программирование VBA в СУБД Access 2003 Для этого в VBA служат operators управления или управляющие конструкции.

" Access 2000. Руководство разработчика. Том 1. Настольные приложения" http:// Кен Гетц, Майк Джилберт.