Работа с макроси създаване, асоцииране на макроси към събития Печат

Работа с макроси – създаване, асоцииране на макроси към събития. Автоматизиране на процеси чрез добавяне на командни бутони

Макросът е множество от едно или повече действия, всяко от които извършва част от операция (например отделно действие е отварянето на форма, затваряне на форма, изпълнение на заявка, извеждане на съобщение и други). Макросите позволяват да се автоматизира някаква по-обща задача, която да се изпълни при определено събитие на даден контрол (отваряне на форма, затваряне на форма, натискане на бутон, двойно щракване на левия бутон на мишката върху контрол и други). Някои действия, които могат да бъдат включени в макроси, са:

  • OpenForm отваря форма и има следните аргументи: Form Name – име; View – начин, по който да се отвори формата – Form, Design, Print Preview, Datasheet; Filter Name – филтър за определяне на сортиране и ограничаване на редовете за форма; Where Condition – израз, който избира редовете за формата от заявката или таблицата; Data Mode – начин на работа с данните във формата – Add, Edit, Read Only; Window Mode – дали прозорецът на формата да е в нормален (Normal), скрит (Hidden), минимизиран (Icon) или диалогов (Dialog) изглед.
  • OpenQuery отваря заявка или я стартира, ако е действаща;
  • OpenTable отваря таблица;
  • OpenReport отваря отчет; аргументите на това действие са аналогични на тези за отваряне на форма.
  • SetWarning включва или изключва всички съобщения на системата. Има един аргумент Warnings On, който при стойност No води до изключване на съобщенията, т.е. предотвратява появата на модалните предупреждения от страна на макроса – всякакви съобщения за грешки, диалози, които изискват потребителят да потвърди или откаже. Има същия ефект, както да се избере клавиша Enter (бутон OK, Yes) на всички съобщения. При стойност Yes на аргумента се включват всички съобщения на системата.
  • Close затваря определен прозорец или активния прозорец, ако няма определен.
  • MsgBox извежда съобщение.
  • SetValue установява стойност на контрол, колона, свойство. Аргументи: Item – име на контрола, колоната или свойството; Expression – израз, който ще се използва за установяване на стойността на елемента Item.
  • CancelEvent отказ от MS Access събитието, което е стартирало макроса, съдържащ това действие. Например, ако събитието Before Update предизвика изпълнение на макрос за валидност и тя не е изпълнена, действието ще откаже актуализирането на данните.

Условия в макрос

В някои случаи е необходимо действие или последователност от действия в макрос да се изпълнят само ако определено условие е изпълнено. Условията се въвеждат в колоната Condition на прозореца на макрос в проектен изглед. За визуализирането на тази колона се използва командата от менюто View | Conditions или бутона . Ако условието е изпълнено, MS Access изпълнява действието в този ред. Ако е необходимо да се изпълнят последователно повече действия (при изпълнено условие) в колоната Condition се пише многоточие (...) на редовете, които непосредствено следват условието. Ако условието не е изпълнено, MS Access игнорира действията, които се предхождат от многоточие в колоната Condition и се прехвърлят към редовете със следващото условие или празно място в колоната Condition.

Асоцииране на макроси към събития

Дадено събитие се свързва с макрос, т.е. когато дадено събитие се случи, макросът се стартира, чрез страницата Event на прозореца Properties на съответния контрол.

Макросът AutoExec е специален макрос, който предизвиква действията в него да се изпълняват първи при отваряне на базата данни. Когато MS Access намери този макрос при отваряне на базата данни, го стартира автоматично. Преди макроса AutoExec се изпълняват само опциите за стартиране Startup. За да не се стартира този макрос, както и да се пренебрегнат опциите за стартиране, трябва да се държи натиснат клавиш Shift, докато се отваря базата данни.

Опциите за стартиране се задават от диалоговия прозорец Startup, който се отваря с командата от менюто Tools | Startup:

  • Application Title – заглавие, което се появява в заглавната лента на прозореца на MS Access;
  • Application Icon – bitmap (.bmp) или icon (.ico) файл, както и пълния път до него, съдържащ изображение на икона на приложението в заглавната лента;
  • Display Form/Page определя форма (или страница с данни), която да се появи при отваряне на базата данни;
  • Display Database Window – при включена опция прозорецът Database се появява при отваряне на базата данни; при изключване на опцията – се предотвратява визуализирането на прозореца Database при отваряне на базата данни;
  • Display Status Bar – тази опция се включва, за да визуализира лента на състоянието (Status Bar);
  • Menu Bar: избор на лента с меню от списъка за визуализиране на собствено меню като меню по подразбиране за текущата база данни;
  • Shortcut Menu Bar: избор на контекстно меню по подразбиране за текущата база данни;
  • Allow Full Menus – опцията се избира, за да позволи използване на всички MS Access команди от менюто;
  • Allow Default Shortcut Menus – избира се опцията, за да се позволи използването на контекстното меню на MS Access по подразбиране;
  • Allow Built-in Toolbars – избира се опцията, за да се позволи визуализирането и използването на лентата с инструменти на MS Access по подразбиране;
  • Allow Toolbar/Menu Changes – избира се опцията, за да се позволят промени в лентите с инструменти, т.е. достъпна е командата View | Toolbars | Customize…;
  • Use Access Special Keys избира се опцията, за да се позволи използването на специални клавиши: F11 или Alt + F1 за отваряне на прозореца Database; Ctrl + F11 за превключване между потребителско и стандартно меню. Ако опцията е изключена, както и опцията Display Database Window, потребителят още може да отвори прозореца Database, като отвори повече от един път същата база данни от списъка с последно отваряните четири бази данни от меню File. Това се предотвратява, като се забранят всички команди от менюто (чрез изключване на опцията Allow Full Menus) или като се замести менюто с потребителско. Дори и тогава с Shift се пренебрегват опциите при отваряне на базата данни.

Форма, която да се отваря автоматично при отваряне на базата данни, може да бъде създадена ръчно или като се използва Tools | Database Utilities | Switchboard Manager, за да се управлява преминаването между форми и отчети в базата данни.

Задачи

Задача 1. Да се създаде макрос, който да отваря форма за въвеждане на нова категория при двойно щракване на левия бутон на мишката върху контрола Combo Box за избор на категория на продукт във формата ProductsInfo Form.

Задача 2. Да се създаде форма, която да позволява извеждане на продадените количества по продукти за определен период от време.

Решение:

Формата Products Quantity има вида:

Съдържа два несвързани контрола Text Box за начална и крайна дата със свойство Format: Short Date или Long Date; свойство Name съответно begin и end и една субформа със свойство Source Object: формата Products quantity subform.

Формата Products quantity subform е с източник на данни заявката Products Quantity:

SELECT p.ProductName, SUM(sd.Quantity) AS SumOfQuantity

FROM Sales s

INNER JOIN (Products p

INNER JOIN SaleDetails sd

ON p.ProductID = sd.ProductID)

ON s.SaleID = sd.SaleID

WHERE s.SaleDate BETWEEN

[Forms]![Products quantity]![begin] AND

[Forms]![Products quantity]![end]

GROUP BY p.ProductName;

За да се актуализира резултата, който извежда субформата при промяна на някоя от датите, се създава макрос Refresh subform, асоцииран със събитието On Exit на двата контрола Text Box. Макросът се състои от едно действие Requery с аргумент – името на контрола Subform:

Задача 3. Да се създаде форма, която позволява въвеждане на нови доставки за продукти, т.е. въвеждане на доставено количество, а то автоматично да се прибавя към наличното и да се актуализира доставната цена.

Решение:

Формата Products add stock има вида:

Формата не е свързана с източник на данни и контролите в нея са несвързани. Със събитието On Exit на контрола Combo Box CategoryID за категория е асоцииран макрос Requery product, съдържащ действието Requery с аргумент – името на контрола за продукт:

Контролът Combo Box ProductID за продукт има свойство Row Source:

SELECT ProductID, ProductName

FROM Products

WHERE [CategoryID]=Forms![Products add stock]!CategoryID;

Еднократното щракване с мишката върху бутона OK стартира макроса Add stock of product:

Действието MsgBox извежда съобщение за липсваща информация и след това се спира изпълнението на макроса.

Ако количеството и цената са въведени, се изпълняват действията:

OpenQuery, което изпълнява заявката Add stock to product:

UPDATE Products

SET Stock = [stock]+Forms![Products add stock]!quantity

WHERE ProductID =

[Forms]![Products add stock]![ProductID];

OpenQuery, което изпълнява заявката Update price of products:

UPDATE Products

SET Price = Forms![Products add stock]!price

WHERE ProductID = Forms![Products add stock]!ProductId;

SetValue, което има следните аргументи:

Item: [Forms]![Products add stock]![CategoryID]

Expression: NULL

SetValue, което има следните аргументи:

Item: [Forms]![Products add stock]![ProductId]

Expression: NULL

SetValue, което има следните аргументи:

Item: [Forms]![Products add stock]![quantity]

Expression: NULL

SetValue, което има следните аргументи:

Item: [Forms]![Products add stock]![price]

Expression: NULL

Задача 4. Да се създаде форма, която да дава възможност за продажба на продуктите.

Решение: