Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Присоединение макроса к событию

Поиск

Теперь, когда вы увидели события, которые предлагают формы и элементы управления, по­ра попробовать присоединить макрос. Основная последовательность действий проста.

1. Создайте и сохраните макрос, как описано в разд. "Создание макроса "ранее в этой главе.

2. Откройте вашу форму в Конструкторе и убедитесь в том, что на экране отображается Окно свойств.


3. Выберите элемент управления, раздел или всю форму.

4. В Окне свойств выберите вкладку События и найдите событие, которое хотите использовать.

5. В поле Событие щелкните кнопкой мыши направленную вниз стрелку и выберите макрос, который хотите использовать.

На рис. 15.19 показан пример.

Рис. 15.19. В этом примере к событию Нажатие кнопки присоединяется макрос MailResults. Теперь при каждом щелчке " кнопки мышью будет выполняться данный макрос

 

 

Часто задаваемый вопрос.

Внедренный макрос

Я создал макрос с помощью Мастера кнопок. Как его можно отредактировать?

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

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


Далее описано, как это делается.

1. Выберите элемент управления, который использует макрос (в данном случае, кнопку).

2. Найдите событие с внедренным макросом. В случае кнопки это событие Нажатие кнопки (On Click). В поле Событие вы увидите текст [Внедренный макрос] ([Embedded Macro]), а не имя макроса.

3. Щелкните один раз кнопкой мыши внутри поля Событие. Рядом с ним появится кнопка с многоточием (...).

4. Щелкните кнопку с многоточием, чтобы отредактировать макрос в знакомом конструкторе или построителе макроса (macro builder).

 

 

Считывание аргументов из формы

Раньше, в этой главе, вы видели макросы, которые могут искать записи, печатать отчеты и отправлять данные по электронной почте. Во всех этих случаях аргументы макросов были фиксированными значениями — другими словами, вы их вводили явно и они никогда не менялись. В разд. "Поиск записи "ранее в этой главе вы познакомились с макросом, который находил текст "hay". Несмотря на удобство этого макроса, его нельзя применить для поиска другого текста. Если нужно найти другой текст, придется создать целиком новый макрос.

Рис. 15.20. Вместо поиска слова "hay" в этом примере ищется любой нужный вам текст. В чем хитрость? Вы задаете текст для поиска в поле ввода в верхней части формы

 

Для создания более гибких макросов вместо фиксированного значения можно использо­вать выражение. Раньше вы неоднократно применяли выражения (см. примеры с запросами в разд. "Вычисляемые поля" главы 7, с отчетами в разд. "Выражения" главы 11 и с формами в разд. "Выполнение вычислений в выражениях"главы 13), поэтому у вас не будет проблем при


формировании базовых выражений, объединяющих текст, добавляющих числа и исполь­зующих функции Access. Нo при создании макроса полезнее всего выражения, извлекающие значение из формы. Вам нужно знать только имя элемента управления.

Для знакомства с этим процессом в действии можно просмотреть пример с фильтрацией, приведенный ранее, и создать форму поиска, подобную показанной на рис. 15.20.

Для создания данного примера следует начать с добавления элемента управления Поле, необходимого для поиска. Вот как это делается.

1. Откройте форму в режиме Конструктора.

2. Выберите на ленте Инструменты конструктора форм | Конструктор → Элементы

управления → Поле (Form Tools | Design Controls Text Box) и нарисуйте элемент Поле на форме.

3. После этого выделите его и затем в Окне свойств выберите вкладку Другие.

4. В верхней части вкладки Другие измените свойство Имя на что-то более интуитивно понятное, например, SearchText (ИскомыйТекст).

 

 

Примечание

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

 

Теперь можно создавать макрос. Вам больше не нужна макрокоманда ОткрытьФорму (OpenForm), которую вы применяли в исходном макросе, поскольку, как вы могли дога­даться, программа Access будет запускать данный макрос из уже открытой формы AnimalTypes (виды животных). Поэтому вам нужна, прежде всего, макрокоманда КЭлементуУправления (GoToControl) с аргументом Имя элемента (Control Name), имеющим значение Description (описание).

Вторая макрокоманда — НайтиЗапись (FindRecord). Вместо задания фиксированного текста (="hay") в аргументе Образец поиска (Find What) вам нужно указать элемент управления SearchText с помощью его имени (=SearchText). Если в имени есть пробелы или специальные символы, убедитесь в том, что имя заключено в квадратные скобки (=[SearchText]).

 

 

Примечание

Если вы ссылаетесь на поле или элемент управления в текущей форме, вам понадобится только имя поля или элемента управления. Но иногда бывает нужно сослаться на элемент управления в другой форме. В этом случае придется применить причудливый синтаксис, обозначающий имя формы и имя элемента управления. Если вы хотите сослаться на эле­мент с именем SearchText на форме, названной SearchForm, следует написать =Forms!SearchForm!SearchText.

 

 

После того как макрос отшлифован, последний шаг — вставка кнопки в форму AnimalTypes для запуска макроса. Далее приведены необходимые действия.

1. Выберите на ленте Инструменты конструктора форм | Конструктор → Элементы

управления → Кнопка (Form Tools | Design Controls Button) и нарисуйте кнопку на форме.


2. Нажмите клавишу <Esc> для отказа от запуска Мастера кнопок.

3. В Окне свойств выберите вкладку События.

4. Щелкните кнопкой мыши направленную вниз стрелку в поле события Нажатие кнопки (On Click) и затем из списка выберите только что созданный макрос.

5. Теперь выберите вкладку Макет и в поле Подпись введите слово Search (Поиск). Этот пояснительный текст появится на кнопке.

Данный шаг завершает пример. Для его проверки перейдите в Режим формы, введите что-нибудь в поле SearchText и щелкните мышью кнопку Search. Вы перейдете сразу к записи, в которой есть искомый текст.

 

 

Изменение свойств формы

Значения свойств формы можно не только читать, но и изменять. Хитрость заключается в применении макрокоманды ЗадатьЗначение (SetValue). Это очень мощная команда, по­скольку она способна изменить любое свойство элемента управления. Ее можно применять для изменения текста в элементе управления, скрытия элемента, изменения его форматиро­вания и т. д. (Дополнительную информацию о свойствах разных элементов управления, ко­торые вы могли бы использовать, см. в главе 13.) Единственная загвоздка — программа Ac­cess считает команду ЗадатьЗначение опасной, поэтому не разрешит выполнить ее в ненадежной БД (см. разд. "Как Access обрабатывает опасные макросы "ранее в этой главе).

У макрокоманды ЗадатьЗначение только два аргумента. Первый аргумент, Элемент (Item) обозначает то, что вы хотите изменить. Можно изменять форму, раздел, поле или элемент управления. Второй аргумент Выражение (Expression) задает новое значение. Можно использовать константу или считать нужное значение из другого элемента управле­ния с помощью выражения.

Если вы хотите создать макрос, стирающий текст поиска из поля SearchText, нужно вставить макрокоманду ЗадатьЗначение и задать в свойстве Элемент значение SearchText, a в свойстве Выражение — "" (обозначает пустую текстовую строку).

 

 

Примечание

В данном примере считается, что вы применяете макрокоманду ЗадатьЗначение к теку­щей форме (например, нажатием кнопки Clear (Очистить)). Если вы запускаете макрос из области переходов, необходимо SearchText заменить полным именем Forms! AnimalTypes! SearchText, которое сообщает программе Access, какую именно форму вы используете.

Если вам понравилась команда ЗадатьЗначение, возможно, вас заинтересует и связан­ная с ней макрокоманда ЗадатьСвойство. Эта команда изменяет одно из свойств элемента управления. (Вы выбираете, какое свойство изменить, с помощью аргумента Свойство.) Команду ЗадатьСвойство можно использовать для изменения цвета элемента управления, его положения или подписи. Но чаще всего макрокоманду ЗадатьСвойство применяют для изменения свойств Включено (Enabled) (для блокировки элементов управления, которые нельзя редактировать) или Видно (Visible) (для скрытия второстепенных элементов управ­ления). Обоим свойствам можно задать значения Истина или Ложь.

Главное достоинство команды ЗадатьСвойство заключается в том, что программа Access всегда считает ее безопасной. Единственный недостаток состоит в том, что Access не разрешает


задавать свойство Текст (Text) элемента управления, поскольку его можно использо­вать для модификации таблицы.

 

 

Макросы с условиями

Все макросы, которые вы видели до настоящего момента, были линейные. Они выполняли свои макрокоманды по порядку от начала к концу. Если это кажется немного однообразным, что же, так оно и есть. Но ваш макрос вовсе не должен оставаться таким. Вы можете разре­шить ему принимать решения и выполнять условные макрокоманды. И в качестве поощре­ния их очень легко задать.

Для создания макроса с условием необходимо применить столбец Условие (Condition). Обычно он не отображается. Для того чтобы сделать его видимым в конструкторе макроса, выберите на ленте Работа с макросами | Конструктор → Показать или скрыть →Условия (Macro Tools | Design Show/Hide Conditions).

Неудивительно, что именно в столбце Условие задаются условия. Условие похоже на выражение, но оно в результате всегда выдает одно из двух значений: Истина или Ложь. Программа Access проверяет условие и решает с его помощью выполнить или нет соответ­ствующую макрокоманду. (На языке программистов это называется проверкой условия.)

Вот как действует этот механизм.

■ если оставить столбец Условие пустым (как в случае обычных макросов), программа Access всегда выполняет данную макрокоманду, если она не сбрасывается из-за ошибки;

■ если условие задано и оказывается Истиной, Access выполняет соответствующую макрокоманду;

■ если условие задано и оказывается Ложью, Access пропускает макрокоманду и переходит к выполнению следующей команды в списке.

Вкратце — у вас есть способ выполнять макрокоманду только иногда, по мере необходи­мости.

 

 

Построение условия

В ходе этого обсуждения возникает интересный вопрос: как сформировать условие? В про­стейших типах условий сравниваются два разных значения. Вот пример:

[ProductName] = "Baloney"

Это условие сравнивает текущее значение элемента управления ProductName со словом "Baloney" (болонская копченая колбаса). Если в данный момент ProductName содержит этот текст (и только его), условие равно Истине. Если же ProductName содержит что-то еще, результат условия — Ложь.

 

Подсказка

Иногда вы получаете условие прямо противоположное тому, которое хотели создать. В труд­ный момент всегда можно изменить условие на противоположное, поместив в начало слово Not. Условие Not [ProductName] ="Baloney" равно Истине, только если текущий эле­мент не содержит любимый всеми мясной продукт.


Знак равенства (=) — один из основных компонентов условной логики, но не единствен­ный вариант. Можно использовать знаки операций "больше чем" (>) и "меньше чем" (<) и оператор "не равно" (о). Далее приведено выражение, проверяющее, больше ли числовое поле определенного значения:

[Price] > 49.99

Для пущей важности можно добавить в смесь ваши любимые функции Access. (В главах 4 и 7 описано множество полезных функций.) Далее приведено условие, проверяющее длину поля и возвращающее значение Истина, если поле меньше трех символов:

Len ([FirstName]) < 3

Вместо операторов, которые вы видели до сих пор, для создания собственных условий можно применять функцию, дающую результат Истина или Ложь. Знатоки программиро­вания называют результат, который может быть Истиной или Ложью и ничем иным, буле­вым значением в честь британского суперматематика Джоржа Буля.

У программы Access есть лишь несколько функций, возвращающих булевы значения, но самая замечательная из этой звездной плеяды называется IsNull (). Как вы узнали раньше, незаполненные поля — это поля, не содержащие никаких данных. Функция IsNull () про­веряет, не пусто ли данное поле или элемент управления. Вот как можно ее применять для выявления пропущенной фамилии:

IsNull ([LastName])

Это условие дает в результате значение Истина, если в текущем поле LastName нет ни­каких данных.

Описанный прием — основной блок формирования логики проверки (как вы увидите в следующем разделе). Вы используете функцию IsNull () для обнаружения пропущенных данных и предупреждения пользователя, применяющего ваш макрос, о том, что он упустил нечто важное.

В заключение, последний прием, который может применяться в условиях, — сочетание нескольких условий для создания более мощных суперусловий. Для этого есть два ключе­вых слова, способных помочь вам объединять условия: And (И) и Or (Или).

And требует одновременного выполнения обоих условий, таким образом, делая ваше условие более строгим. Следующее условие возвращает результат Истина, только если оба поля и FirstName, и LastName длиннее трех символов каждое:

Len([FirstName]) < 3 And Len([LastName]) < 3

Or предоставляет две альтернативы для удовлетворения условия. Следующее условие возвращает результат Истина, если поле FirstName или LastName пусто. Оно возвращает Ложь, только если в обоих полях есть текст.

IsNull([FirstName]) Or IsNull([LastName])

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

 




Поделиться:


Последнее изменение этой страницы: 2016-08-14; просмотров: 298; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.80.194 (0.008 с.)