Ако се опитвате да разберете добре Excel VBA , вероятно бихте могли да се възползвате от няколко примера, за да развиете това визуално основно умение. Тук ще намерите няколко примера за Excel VBA, така че да можете да овладеете този бизнес за обработка на събития.
Пример за Excel VBA: Събитието Open за работна книга
Едно от най-често използваните събития на Excel VBA е събитието Open Workbook Open. Да предположим, че имате работна книга, която използвате всеки ден. Процедурата Workbook_Open в този пример се изпълнява всеки път, когато работната книга се отвори. Процедурата проверява деня от седмицата; ако е петък, кодът показва съобщение за напомняне за вас.
За да създадете процедурата на Excel VBA, която се изпълнява всеки път, когато настъпи събитието за отваряне на работната книга, следвайте тези стъпки:
Отворете работната книга на Excel.
Всяка работна книга на Excel ще свърши работа.
Натиснете Alt+F11, за да активирате VBE.
Намерете работната книга в прозореца на проекта.
Щракнете двукратно върху името на проекта, за да покажете неговите елементи, ако е необходимо.
Щракнете двукратно върху елемента ThisWorkbook.
VBE показва празен прозорец с код за обекта ThisWorkbook.
В прозореца Код изберете Работна книга от падащия списък Обект (вляво).
VBE въвежда началните и крайните оператори за процедура Workbook_Open.
Въведете следните изрази, така че пълната процедура за събитие да изглежда така:
Частна под работна книга_Open()
Затъмни съобщение като низ
Ако делничен ден (сега) = 6 Тогава
Msg = "Днес е петък. Не забравяйте да"
Съобщение = Съобщение & "изпратете отчета за TPS!"
MsgBox Msg
Край, ако
Край под
Прозорецът на кода трябва да изглежда така.
Тази процедура за обработка на събития се изпълнява при отваряне на работната книга.
Workbook_Open се изпълнява автоматично при отваряне на работната книга. Той използва функцията WeekDay на VBA, за да определи деня от седмицата. Ако е петък (ден 6), поле за съобщение напомня на потребителя да изпрати отчет. Ако не е петък, нищо не става.
Ако днес не е петък, може да ви е трудно да тествате тази процедура. Можете просто да промените 6, за да съответстват на днешния действителен номер на деня.
И разбира се, можете да промените тази процедура по всякакъв начин. Например следната версия показва съобщение всеки път, когато работната книга се отвори. Това става досадно след известно време.
Процедура Workbook_Open може да направи почти всичко. Тези манипулатори на събития често се използват за следното:
- Показване на приветствени съобщения (като в страхотната работна книга на Франк)
- Отваряне на други работни книги
- Активиране на конкретен работен лист в работната книга
- Настройване на персонализирани менюта за бърз достъп
Ето последен Excel VBA пример за процедура Workbook_Open, която използва функциите GetSetting и SaveSetting, за да следи колко пъти е била отваряна работната книга. Функцията SaveSetting записва стойност в системния регистър на Windows, а функцията GetSetting извлича тази стойност (вижте системата за помощ за подробности). Следният пример на Excel VBA извлича броя от регистъра, увеличава го и след това го записва обратно в системния регистър. Той също така казва на потребителя стойността на Cnt, която съответства на броя на отварянето на работната книга.
Частна под работна книга_Open()
Dim Cnt As Long
Cnt = GetSetting("MyApp", "Settings", "Open", 0)
Cnt = Cnt + 1
SaveSetting "MyApp", "Settings", "Open", Cnt
MsgBox "Тази работна книга е отваряна " & Cnt & " пъти."
Край под
Използване на манипулатор на събитие Workbook_Open, за да следите колко пъти е била отваряна работна книга.
Пример за Excel VBA: събитието BeforeClose за работна книга
Ето пример за процедурата за обработка на събития на Excel VBA Workbook_BeforeClose, която се изпълнява автоматично непосредствено преди затварянето на работната книга. Тази процедура се намира в прозореца на кода за обект ThisWorkbook:
Частна под работна книга_BeforeClose(Отказ като булева)
Затъмни съобщение като низ
Dim Ans As Long
Dim FName като низ
Msg = "Искате ли да направите резервно копие на този файл?"
Ans = MsgBox(Msg, vbYesNo)
Ако Ans = vbYes Тогава
FName = "F:\BACKUP\" & This Workbook.Name
Тази работна книга.SaveCopyAs FName
Край, ако
Край под
Тази рутина използва поле за съобщения, за да попита потребителя дали иска да направи резервно копие на работната книга. Ако отговорът е да, кодът използва метода SaveCopyAs, за да запази резервно копие на файла на устройство F. Ако адаптирате тази процедура за ваша собствена употреба, трябва да промените устройството и пътя.
Програмистите на Excel често използват процедура Workbook_BeforeClose, за да почистят след себе си. Например, ако използвате процедура Workbook_Open, за да промените някои настройки, когато отворите работна книга (скриване на лентата на състоянието, например), е подходящо да върнете настройките в първоначалното им състояние, когато затворите работната книга. Можете да извършите това електронно домакинство с процедура Workbook_BeforeClose.
Когато използвате събитието Workbook_BeforeClose, имайте предвид това: Ако затворите Excel и всеки отворен файл е бил променен след последното записване, Excel показва обичайното си поле за съобщение „Искате ли да запазите промените си“. Щракването върху бутона Отказ отменя целия процес на затваряне. Но събитието Workbook_BeforeClose така или иначе ще бъде изпълнено.
Пример за Excel VBA: Събитието Преди запазване за работна книга
Събитието BeforeSave, както подсказва името му, се задейства преди да бъде запазена работна книга. Това събитие възниква, когато изберете Файл → Запиши или Файл → Запиши като.
Следващата процедура, която се поставя в прозореца на кода за обект ThisWorkbook, демонстрира събитието BeforeSave. Подпрограмата актуализира стойността в клетка (клетка A1 на Sheet1) всеки път, когато работната книга се записва. С други думи, клетка A1 служи като брояч за проследяване на броя на записите на файла.
Частна под работна книга_BeforeSave(ByVal SaveAsUI _
Като булева, Отмяна като булева)
Dim Counter As Range
Задайте Counter = Sheets("Sheet1").Range("A1")
Брояч.Стойност = Брояч.Стойност + 1
Край под
Забележете, че процедурата Workbook_BeforeSave има два аргумента: SaveAsUI и Cancel. За да демонстрирате как работят тези аргументи, разгледайте следния макрос, който се изпълнява, преди работната книга да бъде запазена. Тази процедура се опитва да попречи на потребителя да запази работната книга с различно име. Ако потребителят избере File → Save As, аргументът SaveAsUI е True.
Когато кодът се изпълни, той проверява стойността на SaveAsUI. Ако тази променлива е True, процедурата показва съобщение и задава Cancel на True, което отменя операцията Save.
Частна под работна книга_BeforeSave(ByVal SaveAsUI _
Като булева, Отмяна като булева)
Ако SaveAsUI Тогава
MsgBox "Не можете да запазите копие на тази работна книга!"
Отказ = Вярно
Край, ако
Край под
Имайте предвид, че тази процедура всъщност няма да попречи на никого да запази копие с различно име. Ако някой наистина иска да го направи, той или тя може просто да отвори работната книга с деактивирани макроси. Когато макросите са деактивирани, процедурите за манипулиране на събития също са деактивирани, което има смисъл, тъй като в крайна сметка те са макроси.