Как да използвате събития от работна книга във VBA

Съдържание:

Anonim

Може да искате да стартирате своя макрос/VBA фрагмент, когато е избрана конкретна работна книга, Избран е лист в работната книга, клетката променя стойността си, когато се случи двойно щракване, когато се добави лист и т.н. Във всички тези случаи използваме Работна книга за обработка на събития. Манипулаторът на събития ни помага да стартираме VBA код, когато възникне определено събитие.

В тази статия ще научим накратко за всеки манипулатор на събития в работна книга.

Какво е манипулатор на събития в работна книга?

Манипулаторът на събития на работна книга е подпрограма, която е локална за работна книга. Този код работи само върху компонентите на работна книга. Това са самата работна книга, нейните листове и диапазони.

Къде да напиша код за обработка на събития в работна книга?

Събитията в работната книга се записват само в обекта на работната книга. Ако напишете събитие от работна книга в някакъв нормален модул, няма да има грешка, но те просто няма да работят.

За да напишете в обекта на работната книга. Щракнете двукратно върху него или щракнете с десния бутон и щракнете върху кода за изглед. Ще се покаже областта за писане на код.

Как да напиша код за конкретно събитие в работната книга?

Сега, когато сте в режим на редактиране, в падащото меню в горния ляв ъгъл ще видите общо. Щракнете върху падащото меню и изберете работната книга. В падащото меню в горния десен ъгъл ще се показват всички събития. Изберете каквото ви е необходимо и скелетният код за това събитие ще бъде написан за вас.

Всяко събитие има фиксирано име на процедура. Това са запазените имена на подпрограми, които започват с работна книга_. Не можете да ги използвате за други подпрограми
(можете, но те ще бъдат нормални подпрограми).

Важно: Всяка подпрограма от този списък ще се изпълнява при посоченото събитие.

Един тип процедура за събитие в работна книга може да бъде написана само веднъж в една работна книга. Ако напишете две еднакви процедури за обработка на събития в една работна книга, това ще доведе до грешка и никоя от тях няма да бъде изпълнена. Разбира се, грешката ще бъде двусмислена подпрограма.

Нека научим накратко за всяко от събитията.
1. The Workbook_SheetChange (ByVal Sh като обект, ByVal Target като диапазон) Събитие

Това събитие се задейства, когато направим някаква промяна в съдържащите работни листове (форматирането е изключено). Ако искате да направите нещо, ако е направена промяна в който и да е лист, тогава кодът ще бъде:

 Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) 'направи нещо Msgbox "направи нещо" End Sub 

"Sh" винаги е активният лист. "Целта" винаги е активната клетка.

Друг пример: Може да искате да поставите дата и час в Cel, prl B1, ако A1 се промени. В този случай използваме събитието workbook_sheetchange. Кодът ще изглежда така:

 Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$ A $ 1" then Range ("B1"). Value2 = Format (Now (), "hh: mm: ss") End If End Sub 

Това ще бъде насочено само към клетката A1 на всеки лист, тъй като не сме посочили обекта "sh".

2. The Workbook_Activate () Събитие

Това събитие се задейства, когато кодът на събитието, съдържащ работна книга, се активира. Скелетният код за това събитие е:

 Private Sub Workbook_Activate () End Sub

Един прост пример показва името на работната книга, когато тя бъде избрана.

 Private Sub Workbook_Activate () MsgBox "You are on workbook" & Activeworkbook.Name End Sub 

Веднага щом влезете в работната книга, която съдържа този код, събитието ще се стартира и ще се покаже съобщение, че „Вие сте на име на работна книга“ (лист 2 е в моя случай).
3. The Workbook_Open () Събитие

Това е един от най -често задаваните въпроси, как да стартирате макрос веднага щом се отвори работната книга. Това е отговорът. Това събитие от работна книга се стартира веднага след отварянето на работната книга. За разлика от Workbook_Activate () този код се изпълнява само веднъж, а не когато се активира всеки път.

Private Sub Workbook_Open () 'your code' End Sub 

Примерът по -долу Workbook_Open събитие просто ще изскочи приветствено съобщение, когато отворите кода, съдържащ работна книга.

 Private Sub Workbook_Open () MsgBox "Добре дошли в главния файл" End Sub

4. The Workbook_Deactivate () Събитие

Това събитие се задейства при напускане на кода, съдържащ работна книга. С други думи, ако искате да направите нещо, като скриване на листове или нещо, когато превключвате работна книга, използвайте това събитие VBA. Синтаксисът е:

 Private Sub Workbook_Deactivate () 'your code' End Sub 

Примерът по -долу Workbook_Deativate събитие просто ще изскочи съобщение, че сте напуснали главния лист, когато ще напуснете този лист.

 Private Sub Workbook_Deactivate () MsgBox "You Left The Master Sheet" End Sub 

5. The Workbook_BeforeClose () Събитие

Това събитие се задейства, когато потвърдите изтриването на съдържащия лист VBA събитие. Синтаксисът е прост:

 Private Sub Workbook_BeforeClose (Cancel as Boolean) End Sub 

Отказът може да бъде зададен на true, ако искате да запазите работната книга отворена.
Кодът по -долу ще ви попита дали искате да запишете съдържанието на работната книга около затваряне.

 Private Sub Workbook_BeforeClose (Cancel as Boolean) ans = MsgBox ("Искате ли да запазите съдържанието на тази работна книга?", VbYesNo) If ans = True then thisworkbook.save End If End Sub 

6. The Workbook_BeforeSave (ByVal SaveAsUI като Boolean, Cancel As Boolean) Събитие

Това събитие се задейства, когато преди запазването на работната книга. Синтаксисът е прост:

 Private Sub Workbook_BeforeSave (ByVal SaveAsUI като Boolean, Cancel As Boolean) End Sub 

SaveAsUI е зададено True, ако има промяна в работната книга (не във VBA).

Отказът може да бъде зададен на true, ако искате да запазите работната книга незапазена.

Кодът по -долу ще ви попита дали искате да запазите съдържанието на предстоящата за запазване работна книга.

 Private Sub Workbook_BeforeSave (ByVal SaveAsUI като Boolean, Cancel as Boolean) ans = MsgBox ("Наистина ли искате да запазите съдържанието на тази работна книга?", VbYesNo) If ans = False Тогава Cancel = True End If End Sub 

7. The Workbook_BeforeSave (ByVal SaveAsUI като Boolean, Cancel As Boolean) Събитие

Това събитие се задейства, когато преди запазването на работната книга. Синтаксисът е прост:

 Private Sub Workbook_BeforeSave (ByVal SaveAsUI като Boolean, Cancel As Boolean) End Sub 

SaveAsUI е зададено True, ако има промяна в работната книга (не във VBA).

Отказът може да бъде зададен на true, ако искате да запазите работната книга незапазена.

Кодът по -долу ще ви попита дали искате да запазите съдържанието на предстоящата за запазване работна книга.

 Private Sub Workbook_BeforeSave (ByVal SaveAsUI като Boolean, Cancel as Boolean) ans = MsgBox ("Наистина ли искате да запазите съдържанието на тази работна книга?", VbYesNo) If ans = False Тогава Cancel = True End If End Sub 

8. The Workbook_NewSheet (ByVal Sh като обект) Събитие

Това събитие се задейства, когато добавите нов лист към работната книга. Синтаксисът е прост:

 Private Sub Workbook_NewSheet (ByVal Sh As Object) End Sub 

Sh е обектът от листа. Типът всъщност е основен обект, така че ако добавим лист с диаграма, макро лист или диалогов лист, събитието все още работи.

Кодът по -долу ще добави и покаже името на листа, който е добавен наскоро.

 Private Sub Workbook_NewSheet (ByVal Sh As Object) MsgBox „Добавихте нов лист.“ & Sh.Name End Sub 

Има още много събития от обекта на работната книга. Тук не можем да ги обсъдим всички. Ако искате да знаете за някакво конкретно събитие, попитайте в секцията за коментари по -долу. Надявам се, че успях да обясня основите на събитията от работната книга в тази статия. Кажете ми дали ви е помогнало в секцията за коментари по -долу.
Свързани статии:

Използване на събитие за смяна на работен лист за стартиране на макрос, когато се направи някаква промяна | Така че, за да стартираме вашия макрос винаги, когато листът се актуализира, използваме събитията от работния лист на VBA.

Стартирайте макрос, ако на листа са направени промени в посочен диапазон | За да стартирате вашия макро код, когато стойността в определен диапазон се промени, използвайте този VBA код. Той открива всяка промяна, направена в определения диапазон и ще задейства събитието.

Най -простият VBA код за маркиране на текущия ред и колона с помощта | Използвайте този малък VBA фрагмент, за да маркирате текущия ред и колона на листа.

Популярни статии:

50 преки пътища в Excel за повишаване на вашата производителност | Бъдете по -бързи в задачата си. Тези 50 преки пътища ще направят работата ви още по -бърза в Excel.

Функцията VLOOKUP в Excel | Това е една от най -използваните и популярни функции на excel, която се използва за търсене на стойност от различни диапазони и листове.

COUNTIF в Excel 2016 | Пребройте стойностите с условия, използвайки тази невероятна функция. Не е необходимо да филтрирате данните си, за да преброите конкретна стойност. Функцията Countif е от съществено значение за подготовката на вашето табло.

Как да използвате функцията SUMIF в Excel | Това е друга основна функция на таблото. Това ви помага да обобщите стойностите при конкретни условия.