Като цяло събитията не са нищо друго, а се случват от нещо. Същото е и в excel. Но понякога искаме нещо да се случи автоматично, когато настъпи определено събитие. За да направим нещо, когато се случи конкретно събитие в Excel, използваме Excel VBA събитие.
Манипулатори на събития в Excel VBA: Видове
В Excel VBA има основно 7 вида обработчици на събития.
- Събития за кандидатстване
- Събития от работната тетрадка
- Събития на работен лист
- Събития в диаграма
- Събития от потребителски формуляр
- Събития с комбинация от клавиши (събития с клавишни комбинации)
- Събития навреме
Нека ги изследваме един по един.
Събития в приложението в Excel
Събитията на ниво приложение се задействат, когато приложението (Excel) е затворено, отворено, активирано, защитено, незащитено и т.н.
Има повече от 50 вида събития на ниво приложение. Така че не можем да обсъждаме всички тук.
Обхват на събитието за кандидатстване:
Тези събития ще работят върху всички работни книги на Excel, стига кодът, съдържащ работна книга, да е отворен. Например, ако сте създали събитие на ниво приложение, за да ви каже името на листа на активния лист, то то ще се задейства при всяко активиране на лист на всяка работна книга.
Как да създадете манипулатор на събития в Application във VBA?
Създаването на събитие в приложението е малко сложно. Тук подробно го обясних с пример.
Събития в работна книга в Excel
Обхват на събитието от работната книга
Събитията в работната книга работят върху цялата работна книга, която съдържа кода. Събитието може да отваря, затваря, активира, деактивира, променя листа и т.
Къде да напиша събития в работна книга?
Събитията на работната книга се записват върху обекта на работната книга.
Как да напиша събитие в работна книга?
Следвай тези стъпки:
1. В изследователя на проекта щракнете двукратно върху обекта на работната книга. Ще се покаже областта за писане на код. Всички събития с обхват на работната книга са написани тук.
2. В горния ляв ъгъл на областта за писане на код ще видите падащо меню. Кликнете върху падащото меню и изберете работната книга. По подразбиране е общо.
3. След като изберете работната книга от падащото меню вляво, тя по подразбиране ще вмъкне подпрограма за събитие workbook_open. Но ако искате да използвате различна подпрограма за събитие, изберете я от падащото меню в горния десен ъгъл. Той ще изброи всички налични събития в работната книга.
4. Изберете събитието, от което се нуждаете. В името на примера, аз избирам събитието SheetActivate. Това събитие се активира при всеки избор на лист в кода, съдържащ работна книга.
Пример за събитие в работна книга:Това е прост пример. Просто искам да покажа името на активирания работен лист. За целта просто използвам събитието SheetActivate в обекта Workbook.
Частен под Workbook_SheetActivate (ByVal Sh като обект) MsgBox Sh.Name & "Активиран" End Sub
Сега, когато се активира нов лист в тази работна книга, това събитие ще се задейства. Ще бъдете подканени с масаж, активирано име на лист.
Знам, че този код не е толкова полезен, но можете да поставите всякакъв набор от инструкции между тези редове. Можете да извиквате функциите и подпрограмите от самите модули.
Събития на работен лист в Excel
Всички събития, насочени към диапазон и клетки, са записани в събитията на работния лист. Можете да прочетете за събитията на работния лист тук.
Обхватът на събитието на работния лист
Събитията на работния лист са насочени към диапазоните и клетките на конкретен работен лист. Събитие на работен лист ще се задейства за събития, които се случват на конкретния работен лист (работният лист, който съдържа кода).
Къде са записани събитията от работния лист?
Събитията на работния лист се записват върху обекта на работния лист.
Как да напиша код за обработка на събития на работен лист?
Това е същото като събитията в работната книга.
1. В изследователя на проекта щракнете двукратно върху обекта на работния лист. Областта за писане на код ще се покаже за работния лист. Всички събития с обхват на работния лист са записани в тези работни листове.
2. В горния ляв ъгъл на областта за писане на код ще видите падащо меню. Кликнете върху падащото меню и изберете работния лист. По подразбиране е общо.
3. След като изберете работния лист от лявото падащо меню, той по подразбиране ще вмъкне подпрограма за събитие worksheet_selectionChange. Но ако искате да използвате различна подпрограма за събитие, изберете я от падащото меню в горния десен ъгъл. Той ще изброи всички налични събития на работен лист.
4. Изберете събитието, от което се нуждаете. В името на примера, избирам събитието Worksheet_SelectionChange (ByVal Target As Range). Това събитие се активира при всяка промяна на избора на диапазон на листа.
Пример за събитие на работен лист
Private Sub Worksheet_SelectionChange (ByVal Target As Range) MsgBox "Вие сте в" & Target.Address End Sub
Горното събитие е записано в лист 1 на работна книга. Това събитие ще показва адреса на диапазона, който сте избрали в кода, съдържащ лист, всеки път, когато промените избора на диапазон. По -долу са дадени още няколко примера за събития на работен лист.
Събитията на работния лист се използват най -вече в динамични табла за управление. Можете да използвате клетки като квадратчета за отметка или активни селекции, за да направите таблата си за управление динамични.
По -долу са дадени още няколко примера за събития на работен лист.
Използване на събитие за смяна на работен лист за стартиране на макрос, когато се направи някаква промяна
Стартирайте макрос, ако на листа са направени промени в посочен диапазон
Най -простият VBA код за маркиране на текущия ред и колона с помощта
Събитията в диаграмата
В Excel има два вида събития с диаграми. Едната е нормално вградените диаграми, които обсъдихме тук подробно. Много прилича на събития на ниво приложение.
Друг е листът с диаграми. Това са специалните листове, които съдържат само диаграмите, свързани с данни на някои други листове.
Що се отнася до събития, те са много като обикновените листове.
Къде да пишете събития в диаграми?
Събитията в диаграмата се записват в обекта на диаграмата. Просто щракнете двукратно върху листа с диаграми, за да отворите кодовата област.
Как да напиша събития в диаграмата?
Следвай тези стъпки:
1. В изследователя на проекта щракнете двукратно върху обекта на диаграма, за да отворите кодовата област. Всички конкретни събития, свързани с диаграма, са написани тук.
2. В горния десен ъгъл на кодовата област ще видите обичайното падащо меню. Изберете диаграмата от това падащо меню.
3. От десния ъгъл изберете събитието, което искате.
Например, ако искам да направя нещо веднага щом потребителят избере диаграмата, ще използвам събитието Chart_Activate.
Пример: Събитие на лист диаграма
Private Sub Chart_Activate () MsgBox "Диаграмата се обновява" End Sub
Горното парче код ще се задейства веднага щом изберете листа с диаграмата. Тук той просто ще покаже съобщението, че диаграмата е опреснена, но можете да направите много. Както можете да изберете динамично диапазона от данни за диаграмата, преди да покажете това съобщение.
По -долу са дадени още няколко примера за събития в диаграмата:
Събитията на UserForm
Събитието на потребителски формуляр е точно като другите събития. Има няколко събития, които се случват във формуляра за потребител. Можете да използвате тези събития, за да задействате събитията.
Къде да напишете събитията на потребителската форма?
За да напишете събитие на потребителски формуляр, първо трябва да вмъкнете UserForm.
1. След това щракнете с десния бутон върху UserForm и щракнете върху кода за изглед. Сега кодовата област ще се отвори.
2. Сега в горната лява част изберете Userform.
3. От лявото падащо меню изберете събитието, което искате да използвате, за да задействате изпълнението на кода.
4. Напишете желания код между кода на кодовото събитие.
Примерът по -долу просто показва съобщението, когато е активиран потребителски формуляр.
Private Sub UserForm_Activate () MsgBox "Здравейте, моля, проверете двойно информацията си." End Sub
Горният код просто показва съобщение, но можете да използвате това събитие, за да попълните предварително формуляра с някои входни данни по подразбиране или да използвате информацията за листа, за да го попълните.
Събитието Onkey
Тези събития се задействат при натискане на определен клавиш или комбинация от клавиши. Това е много подобно на създаването на вашите чрез преки пътища.
Събитието OnKey всъщност е функция или метод на клас Application, който има два аргумента, както е показано по -долу:
Application.onkey Ключ, ["процедура"]
The ключ е ключът или комбинацията от клавиши, които искате да използвате като спусък.
"Процедура" е незадължителен аргумент, който е име на низ на процедурата или макроса, който искате да стартирате. Ако не дефинирате процедурата, тя ще задейства текущата процедура.
Къде да напиша събитията Onkey?
Е, можете да напишете събитието Onkey на всеки нормален модул. Те ще работят в нормални модули, но първо ще трябва да изпълните тази подпрограма, която съдържа инструкциите Onkey. Не е като да сте стартирали макроса всеки път, за да използвате събитията Onkey. Само веднъж ще трябва да стартирате този макрос, когато отворите работната книга.
Ако не искате да стартирате макроса, съдържащ събитията Onkey, можете да ги поставите в събитието workbook_open () в обекта на работната книга. Той ще активира събитията Onkey веднага щом отворите работната книга, която съдържа събитията Onkey.
Как да напиша манипулатор на събитие Onkey?
Така че, ако вече имате някои макроси, които искате да изпълните с определен пряк път, напишете нова процедура, която ще съдържа списъка с преки пътища. Например тук имам макрос, който показва съобщението на прекия път.
Sub show_msg () MsgBox "Пряк път работи" End Sub
Сега искам да стартирам този макрос, докато натискам комбинацията от клавиши CTRL+j. За да направя това, пиша кода по -долу VBA.
Sub Activate_Onkey () Application.OnKey "^j", "show_msg" End Sub
"^" (carate) е за CTRL-ключ. По -долу е дадена таблицата за всички ключови съкращения в excel VBA.
https://docs.microsoft.com/en-us/office/vba/api/excel.application.onkey
Как да активирам Onkey Event?
След като напишете горния код в модул, ако отидете в изгледа на Excel и използвате клавиша CTRL+J, той няма да работи. Първо, трябва да стартирате поддиапазона, който определя събитията OnKey. Затова стартирайте веднъж подзаглавието Activate_Onkey () и след това ще работи за цялата сесия. След като затворите работната книга, която съдържа определенията на Onkey, тя ще спре да работи.
Можете да поставите определенията на Onkey в рамките на процедурата, която искате да се случи. Но тогава ще трябва да стартирате макроса веднъж ръчно. Ето защо предлагам да поставите събитията Onkey в събитията Workbook_Open. Това ще накара всички събития Onkey да се активират автоматично.
Събитието Ontime в Excel
Както подсказва името, събитието Onkey задейства посочената подпрограма на или след възможно най -ранното определено време. Excel може да е зает с някои други задачи, като например изпълнението на сумата от инструкции или в режим на копиране в миналото. В този случай това може да забави събитието Ontime. Ето защо аргументът се показва като най -ранен.
Синтаксис на събитие OnTime
Събитието Ontime е функция на класа Application. Той има два съществени аргумента и два незадължителни аргумента.
Application.Ontime EarliestTime, „Процедура“, [LatestTime], [График]
TheНай -ранно времее времето, когато искате процедурата ви да се изпълнява. Но Excel ще стартира посочения макрос след определеното най -ранно време, само след като е безплатен.
The "Процедура" е името на процедурата, която искате да изпълните в посочения час.
Както казах, че няма гаранция, Excel ще изпълни вашата процедура в определеното време. The Последно времее времето след най -ранното време да дадете на Excel прозорец, за да бъде безплатен и да изпълни вашата задача.
Ако искате да деактивирате планираното събитие OnTime, задайте гографик до невярно.
Къде да напиша събитието Ontime?
Събитието OnTime може да бъде записано във всеки модул. Ще трябва да изпълните събитието, съдържащо процедурата за активиране на събитието.
Ако искате вашето събитие да се активира веднага щом отворите работната книга, която съдържа събитието, поставете го в събитието workbook_open. Той ще активира събитието веднага щом отворите кода, съдържащ събитието в Excel.
Как да напиша събитието Ontime?
Да предположим, че имате подпрограма, която показва текущата дата и час
Sub show_msg () MsgBox "Текущата дата и час е" & Now End Sub
Сега, ако искате тази процедура да се изпълнява след 5 секунди от изпълнението на друг макрос, тогава ще трябва да поставите този код.
Sub OnTimeTest () '-някои други задачи Application.ontime Now + (5 /24 /60 /60), "show_msg" End Sub
След като стартирате подпрограмата OnTimeTest, след пет секунди от нейното изпълнение тя ще задейства подпрограмата show_msg. Така че ще бъде добре, ако искате да направите нещо след няколко пъти да правите нещо друго, използвайте горната структура.
Ако искате вашият макрос да се изпълнява след всеки няколко секунди/минути/часове/и т.н., тогава можете да извикате самата тази функция. Това би било един вид рекурсивна подпрограма.
Sub OnTimeTest () MsgBox "Текущата дата и час е" & Now Application.ontime Now + (5 /24 /60 /60), "OnTimeTest" End Sub
Горната подпрограма ще се изпълнява след всеки пет секунди, след като я стартирате.
Така че да, момчета, това са събитията в Excel VBA. Някои от горепосочените категории имат разнообразие от задействащи събития. Разбира се, не мога да обясня всички тук. Това ще направи книга дълга статия. Това беше само въведение в събитията, налични в Excel VBA. За повече информация следвайте връзките, вградени в статиите. Споменах някои свързани статии по -долу. Можете също да ги прочетете.
Ако имате някакви съмнения, свързани с тази статия или друга мисъл на excel/VBA, попитайте ни в секцията за коментари по -долу.
Събития на работния лист в Excel VBA| Събитието на работния лист е наистина полезно, когато искате вашите макроси да се изпълняват, когато на листа се появи определено събитие.
Събития от работна книга, използващи VBA в Microsoft Excel | Събитията от работната книга работят върху цялата работна книга. Тъй като всички листове са част от работната книга, тези събития работят и върху тях.
Предотвратяване на автоматични/eventmacro изпълнения с помощта на VBA в Microsoft Excel | За да предотвратите изпълнението на макроса auto_open, използвайте клавиша shift.
Диаграми на обектни събития с помощта на VBA в Microsoft Excel | Диаграмите са сложни обекти и има няколко компонента, които сте прикрепили към тях. За да направим Chart Events използваме модула Class.
Популярни статии:
50 преки пътища в Excel за повишаване на вашата производителност | Бъдете по -бързи в задачата си. Тези 50 преки пътища ще ви накарат да работите още по -бързо в Excel.
Функцията VLOOKUP в Excel | Това е една от най -използваните и популярни функции на excel, която се използва за търсене на стойност от различни диапазони и листове.
COUNTIF в Excel 2016 | Пребройте стойностите с условия, използвайки тази невероятна функция. Не е необходимо да филтрирате данните си, за да преброите конкретна стойност. Функцията Countif е от съществено значение за подготовката на вашето табло.
Как да използвате функцията SUMIF в Excel | Това е друга основна функция на таблото. Това ви помага да обобщите стойностите при конкретни условия.