Події Excel VBA

Події відбуваються весь час, коли користувач відкриває книгу Excel і починає виконувати різні дії, такі як введення даних у клітинки або переміщення між аркушами

У редакторі Visual Basic (ALT+F11) вже налаштовані підпрограми, які можуть бути звільнені, коли користувач щось робить, наприклад введення даних у клітинку. Підпрограма не містить жодного коду дії, а лише оператор "Sub" та "End Sub" без коду між ними. Вони фактично сплять, тому нічого не відбувається, поки ви не введете якийсь код.

Ось приклад на основі події "Зміна" на аркуші:

Як програміст VBA, ви можете додати код, щоб певні дії відбувалися, коли користувач виконує певну дію. Це дає вам можливість контролювати користувача та запобігати його вчиненню дій, які ви не хочете, аби вони могли пошкодити вашу книгу. Наприклад, ви можете захотіти, щоб вони зберегли власну індивідуальну копію книги під іншим ім’ям, щоб вони не впливали на оригінал, який може використовуватися кількома користувачами.

Якщо вони закриють книгу, їм буде автоматично запропоновано зберегти зміни. Однак у книзі є подія "BeforeClose", і ви можете ввести код, щоб запобігти закриттю книги та запуску події "Зберегти". Потім ви можете додати кнопку до самого робочого аркуша та додати до нього власну процедуру "Зберегти". Ви також можете вимкнути процедуру "Зберегти" за допомогою події "Перед збереженням"

Розуміння того, як відбуваються події, є абсолютно необхідним для програміста VBA.

Типи подій

Робочий зошит Події - ці події запускаються на основі того, що користувач робить із самою книгою. Вони включають дії користувача, такі як відкриття книги, закриття книги, збереження книги, додавання або видалення аркуша

Події робочого аркуша - ці події запускаються користувачем, який виконує дії на певному аркуші. Кожен робочий аркуш у книзі має окремий модуль коду, який містить різні події спеціально для цього аркуша (не для всіх аркушів). Вони включають дії користувача, такі як зміна вмісту комірки, подвійне клацання по клітинці або клацання правою кнопкою миші по клітинці.

Події керування Active X - Активні елементи керування X можна додати до робочого аркуша за допомогою значка «Вставити» на вкладці «Розробник» на стрічці Excel. Часто це кнопки управління, які дозволяють користувачеві виконувати різні дії під контролем вашого коду, але вони також можуть бути такими об’єктами, як випадаючі меню. Використання елементів керування Active X на відміну від елементів керування формою на аркуші дає широкі можливості для програмування. Елементи керування Active X дають вам набагато більшу гнучкість з точки зору програмування щодо використання елементів керування формою на робочому аркуші.

Наприклад, у вас може бути два випадаючі елементи керування на вашому аркуші. Ви хочете, щоб доступний список у другому розкривному списку базувався на тому, що користувач вибрав у першому спадному меню. Використовуючи подію "Змінити" у першому спадному меню, ви можете створити код, щоб прочитати те, що вибрав користувач, а потім оновити друге спадне меню. Ви також можете деактивувати друге випадаюче меню, поки користувач не зробить вибір у першому спадному меню

Події UserForm - Ви можете вставити та оформити професійну форму, щоб використовувати її як спливаюче вікно. Усі елементи керування, які ви розміщуєте у формі, є елементами керування Active X і мають ті самі події, що й елементи керування Active X, які можна розмістити на робочому аркуші

Події діаграми - Ці події стосуються лише аркуша діаграми, а не діаграми, що з'являється як частина аркуша. Ці події включають зміну розміру діаграми або вибір діаграми.

Події застосування - Вони використовують об’єкт Application у VBA. Приклади дозволяють запускати код при натисканні певної клавіші або досягненні певного часу. Ви можете запрограмувати ситуацію, коли книгу залишають відкритою цілодобово, і вона імпортує дані із зовнішнього джерела протягом ночі у заздалегідь визначений час.

Небезпека використання коду в подіях

Коли ви пишете код, щоб щось зробити, коли користувач виконує певну дію, ви повинні мати на увазі, що ваш код може викликати інші події, які можуть перевести ваш код у безперервний цикл.

Наприклад, припустимо, що ви використовуєте подію "Змінити" на робочому аркуші, щоб, коли користувач вводить значення в клітинку, обчислення на основі цієї комірки розміщувалось у клітинці безпосередньо праворуч від неї.

Проблема тут у тому, що розміщення обчислюваного значення в комірці викликає іншу подію "Зміна", яка потім, у свою чергу, запускає ще одну подію "Зміни", і так далі, поки у вашому коді не закінчиться стовпців для використання, і він не підкине повідомлення про помилку.

Під час написання коду події потрібно ретельно подумати, щоб інші випадки не сталися випадково

Вимкнути події

Ви можете використовувати код, щоб вимкнути події, щоб обійти цю проблему. Вам потрібно буде включити код, щоб вимкнути події під час запуску коду події, а потім знову ввімкнути події в кінці коду. Ось приклад того, як це зробити:

1234 Sub DisableEvents ()Application.EnableEvents = НеправдаApplication.EnableEvents = ІстинаEnd Sub

Майте на увазі, що це вимикає всі події безпосередньо у програмі Excel, тому це також вплине на інші функції в Excel. Якщо ви використовуєте це з будь -якої причини, переконайтеся, що події знову вмикаються.

Важливість параметрів у подіях

Зазвичай події мають параметри, за допомогою яких можна дізнатися більше про те, що робить користувач, і про місце розташування клітинки, в якій вони знаходяться.

Наприклад, подія зміни робочого аркуша виглядає так:

1 Приватний робочий аркуш_Змінити (ціль ByVal як діапазон)

За допомогою об’єкта діапазону можна дізнатися координати рядка/стовпця комірки, в яких фактично перебуває користувач.

1234 Приватний робочий аркуш_Змінити (ціль ByVal як діапазон)MsgBox Target.ColumnMsgBox Target.RowEnd Sub

Якщо ви хочете, щоб ваш код працював лише з певним номером стовпця або рядка, то ви додаєте умову, яка виходить із підпрограми, якщо стовпець не є необхідним.

123 Приватний робочий аркуш_Зміна (ціль ByVal як діапазон)Якщо Target.Column 2 То вийдіть із SubEnd Sub

Це вирішує проблему того, що ваш код запускає декілька подій, оскільки він працюватиме лише в тому випадку, якщо користувач змінив клітинку у стовпці 2 (стовпець В)

Приклади подій у робочому зошиті (не вичерпні)

Події робочої книги знаходяться під об’єктом «Ця робоча книга» у Провіднику проектів VBE. Вам потрібно буде вибрати «Робоча книга» у першому спадному меню у вікні коду, а потім у другому випадаючому списку відображатимуться всі доступні події

Відкритий захід робочого зошита

Ця подія запускається кожного разу, коли користувач відкриває книгу. Ви можете використати його, щоб надіслати вітальне повідомлення користувачеві, захопивши його ім’я користувача

123 Private Sub Workbook_Open ()MsgBox "Ласкаво просимо" та Application.UserNameEnd Sub

Ви також можете перевірити їх ім’я користувача у списку, що міститься на прихованому аркуші, щоб дізнатися, чи вони мають право на доступ до книги. Якщо вони не є авторизованим користувачем, ви можете відобразити повідомлення та закрити книгу, щоб вони не могли її використовувати.

Робочий зошит Подія нового аркуша

Ця подія запускається, коли користувач додає новий аркуш до книги

Ви можете використовувати цей код лише для того, щоб дозволити собі додавати новий аркуш, а не для того, щоб різні користувачі додавали аркуші та робили безлад у книзі

1234567 Приватна підручна робоча книга_Новий аркуш (ByVal Sh як об'єкт)Application.DisplayAlerts = НеправдаЯкщо Application.UserName "Річард" ТодіШ. ВидалитиЗакінчити ЯкщоApplication.DisplayAlerts = ПравдаEnd Sub

Зауважте, що вам потрібно вимкнути сповіщення, оскільки попередження користувача з’явиться, коли аркуш буде видалено, що дозволяє користувачеві обійти ваш код. Обов’язково знову ввімкніть сповіщення!

Втомилися від пошуку прикладів коду VBA? Спробуйте AutoMacro!

Робоча книга перед збереженням події

Ця подія запускається, коли користувач натискає на значок «Зберегти», але до того, як «Зберегти» дійсно має місце

Як описано раніше, ви можете заборонити користувачам зберігати зміни до вихідної книги та змусити їх створити нову версію за допомогою кнопки на аркуші. Все, що вам потрібно зробити, це змінити параметр "Скасувати" на True, і книгу ніколи не можна зберегти звичайним методом.

123 Private Sub Workbook_BeforeSave (ByVal SaveAsUI як Boolean, Cancel As Boolean)Скасувати = ПравдаEnd Sub

Робочий зошит перед закритою подією

Ви можете використовувати цю подію, щоб запобігти закриттю книги та знову примусити їх вийти за допомогою кнопки аркуша. Знову ж таки, для параметра "Скасувати" встановлено значення "Правда". Червоний X у верхньому правому куті вікна Excel більше не працює.

123 Private Sub Workbook_BeforeClose (Скасувати як логічне значення)Скасувати = ПравдаEnd Sub

Приклади подій на робочому аркуші (не вичерпні)

Події аркуша знаходяться під конкретним об’єктом імені аркуша у Провіднику проектів VBE. Вам потрібно буде вибрати «Робочий лист» у першому спадному вікні у вікні коду, а потім у другому випадаючому списку відображатимуться всі доступні події

Подія зміни робочого аркуша

Ця подія запускається, коли користувач вносить зміни до аркуша, наприклад, вводить нове значення в клітинку

Ви можете використовувати цю подію, щоб поставити додаткове значення або коментар біля зміненої комірки, але, як обговорювалося раніше, ви не хочете починати цикл подій.

12345 Приватний робочий аркуш_Змінити (ціль ByVal як діапазон)Якщо Target.Column 2 То вийдіть із SubActiveSheet.Cells (Target.Row, Target.Column + 1). Значення = _ActiveSheet.Cells (Target.Row, Target.Column). Значення * 1.1End Sub

У цьому прикладі код буде працювати, лише якщо значення введено у стовпець В (стовпець 2). Якщо це правда, вона додасть 10% до числа і помістить його в наступну доступну клітинку

Робочий лист перед подією подвійного клацання

Ця подія активує код, якщо користувач двічі натисне клітинку. Це може бути надзвичайно корисним для фінансових звітів, таких як баланс або звіт про прибутки та збитки, де менеджери, ймовірно, будуть оскаржувати цифри, особливо якщо підсумок негативний!

Ви можете використати це, щоб забезпечити детальний аналіз, так що коли менеджер кидає виклик конкретному номеру, йому залишається лише двічі клацнути по номеру, а розбивка з’явиться як частина звіту.

Це дуже вражає з точки зору користувача і рятує їх від постійних запитань "чому ця цифра така висока?"

Вам потрібно буде написати код, щоб дізнатися заголовок / критерії номера (використовуючи властивості об’єкта Target), а потім відфільтрувати табличні дані, а потім скопіювати їх у звіт.

Програмування VBA | Генератор коду працює для вас!

Робочий лист Активувати подію

Ця подія виникає, коли користувач переходить з одного аркуша на інший. Це стосується нового аркуша, на який переходить користувач.

Його можна використати, щоб переконатися, що новий аркуш повністю розрахований, перш ніж користувач почне на ньому що -небудь робити. Його також можна використовувати лише для повторного обчислення цього окремого аркуша без перерахунку всієї книги. Якщо книга велика і має складну формулу, то повторний розрахунок одного аркуша економить багато часу

123 Приватний робочий аркуш_активувати ()ActiveSheet.CalculateEnd Sub

Події керування Active X (не вичерпні)

Як обговорювалося раніше, ви можете додати елементи керування Active X безпосередньо на аркуш. Це можуть бути кнопки команд, випадаючі списки та списки

Події Active X знаходяться під конкретним об’єктом імені аркуша (де ви додали елемент керування) у Провіднику проектів VBE. Вам потрібно буде вибрати назву елемента керування Active X у першому спадному вікні у вікні коду, а потім у другому випадаючому списку відображатимуться всі доступні події

Кнопка команди Натисніть Подія

Коли ви додасте командну кнопку до електронної таблиці, ви захочете, щоб вона виконала певні дії. Ви робите це, вводячи код у подію Click.

Ви можете легко додати до цього повідомлення "Ви впевнені?", Щоб перевірити, перш ніж код запуститься

12345 Приватна підкоманда CommandButton1_Click ()Dim ButtonRet як варіантButtonRet = MsgBox ("Ви впевнені, що хочете це зробити?", VbQuestion Або vbТак Ні)Якщо ButtonRet = vbNo, то вийдіть із SubEnd Sub

Випадаюче меню (Combo Box) Змінити подію

У спадному меню Active X є подія зміни, так що якщо користувач вибирає певний елемент із випадаючого списку, ви можете зафіксувати його вибір за допомогою цієї події, а потім написати код, щоб відповідно адаптувати інші частини аркуша або книги.

123 Приватний підкомбінат ComboBox1_Change ()MsgBox "Ви вибрали" & ComboBox1.TextEnd Sub

Програмування VBA | Генератор коду працює для вас!

Поставте галочку (прапорець) Натисніть Подія

Ви можете додати галочку або прапорець до робочого аркуша, щоб надати користувачеві можливість вибору опцій. Ви можете скористатися подією клацання, щоб побачити, чи користувач щось змінив щодо цього. Повертаються значення True або False, залежно від того, чи було поставлено галочку.

123 Private Sub CheckBox1_Click ()MsgBox CheckBox1. ЗначенняEnd Sub

Події UserForm (не вичерпні)

Excel надає вам можливість створювати власні форми. Вони можуть бути дуже корисними для використання як спливаючі вікна для збору інформації або для надання користувачеві декількох варіантів вибору. Вони використовують елементи керування Active X, як описано раніше, і мають точно такі ж події, хоча події дуже сильно залежать від типу елемента керування.

Ось приклад простої форми:

Коли він відображається, він виглядає так на екрані

Ви могли б використовувати події у формі, щоб робити такі дії, як введення назви компанії за умовчанням під час відкриття форми, перевірка відповідності введення назви компанії до такої, що вже є в електронній таблиці та її помилка, та додавання коду до клацання події на кнопках "OK" та "Скасувати"

Код та події за формою можна переглянути, двічі клацнувши будь -де на формі

Перше спадне меню дає доступ до всіх елементів керування у формі. Друге спадне меню дає доступ до подій

UserForm Активувати подію

Ця подія запускається, коли форма активована, зазвичай, коли вона відображається. Ця подія може бути використана для налаштування значень за замовчуванням, наприклад назву компанії за замовчуванням у текстовому полі назви компанії

123 Приватний підкористувач UserForm_Activate ()TextBox1.Text = "Назва моєї компанії"End Sub

Програмування VBA | Генератор коду працює для вас!

Змінити подію

Більшість елементів керування у формі мають подію зміни, але в цьому прикладі текстове поле назви компанії може використовувати цю подію, щоб обмежити довжину введеної назви компанії

123456 Приватний підрядник TextBox1_Change ()Якщо Len (TextBox1.Text)> 20 ТодіMsgBox "Назва обмежена 20 символами", vbCriticalTextBox1.Text = ""Закінчити ЯкщоEnd Sub

Натисніть Подія

Ви можете використовувати цю подію, щоб вжити заходів, коли користувач натискає елементи керування у формі або навіть саму форму

На цій формі є кнопка "ОК", і, зібравши назву компанії, ми хотіли б помістити її в клітинку електронної таблиці для подальшого використання

1234 Приватна підкоманда CommandButton1_Click ()ActiveSheet.Range ("A1"). Значення = TextBox1.TextМенеEnd Sub

Цей код діє, коли користувач натискає кнопку «OK». Він вводить значення у вікні введення назви компанії у клітинку A1 на активному аркуші, а потім приховує форму, щоб користувальницький контроль повертався назад на аркуш.

Події діаграми

Події діаграми працюють лише на діаграмах, які знаходяться на окремому аркуші діаграми, а не на діаграмі, яка включена до стандартного аркуша

Події діаграми дещо обмежені і їх не можна використовувати на робочому аркуші, де цілком може бути кілька діаграм. Крім того, користувачі не обов’язково хочуть переходити з аркуша, що містить цифри, на аркуш діаграми - тут немає негайного візуального впливу

Найбільш корисною подією було б дізнатися компонент діаграми, на який користувач натиснув, наприклад. сегмент у круговій діаграмі або стовпчик у стовпчастій діаграмі, але це не подія, доступна для стандартного діапазону подій.

Цю проблему можна вирішити, використовуючи модуль класу, щоб додати подію "Mouse Down", яка поверне деталі компонента діаграми, на який користувач натиснув. Це використовується на діаграмі на робочому аркуші.

Це передбачає дуже складне кодування, але результати вражають. Ви можете створити свердловини, наприклад користувач натискає на сегмент кругової діаграми, і миттєво ця діаграма приховується, а на її місці з'являється друга діаграма, що показує кругову діаграму деталей для вихідного сегменту, або ви можете створити табличні дані, що підтримують цей сегмент кругової діаграми.

Події застосування

Ви можете використовувати об'єкт Application у VBA для запуску коду відповідно до певної події

Програмування VBA | Генератор коду працює для вас!

Application.OnTime

Це може дозволити вам регулярно запускати фрагмент коду до тих пір, поки книга завантажиться в Excel. Можливо, ви захочете автоматично зберігати свою книгу в іншій папці кожні 10 хвилин або залишити робочий аркуш на ніч, щоб надсилати останні дані із зовнішнього джерела.

У цьому прикладі підпрограма вводиться в модуль. Він відображає вікно повідомлень кожні 5 хвилин, хоча це легко може бути іншою кодованою процедурою. Одночасно він скидає таймер на поточний час плюс ще 5 хвилин.

Щоразу, коли він запускається, таймер скидається, щоб запустити одну і ту ж підпрограму ще протягом 5 хвилин.

1234 Sub TestOnTime ()MsgBox "Тестування часу роботи"Application.OnTime (Зараз () + TimeValue ("00:05:00")), "TestOnTime"End Sub

Application.OnKey

Ця функція дозволяє створювати власні гарячі клавіші. Ви можете зробити будь -яку комбінацію клавіш викликом підпрограми вашого створення.

У цьому прикладі буква "а" перенаправляється так, що замість того, щоб розмістити "а" в комірці, вона відображатиме вікно повідомлення. Цей код потрібно розмістити у вставленому модулі.

123456 Sub TestKeyPress ()Application.OnKey "a", "TestKeyPress"End SubSub TestKeyPress ()MsgBox "Ви натиснули" а ""End Sub

Перш за все, ви запускаєте підпрограму «TestKeyPress». Вам потрібно запустити це лише один раз. Він повідомляє Excel, що кожного разу, коли натискається буква "а", вона викликатиме підпрограму "TestKeyPress". Підпрограма "TestKeyPress" просто відображає вікно повідомлення, яке повідомляє, що ви натиснули клавішу "а". Звичайно, це могло б завантажити форму або робити що -небудь інше.

Ви можете використовувати будь -яку комбінацію клавіш, яку можна використовувати з функцією «SendKeys»

Щоб скасувати цю функціональність, ви запускаєте оператор «OnKey» без параметра «Процедура».

123 Sub CancelOnKey ()Application.OnKey "а"End Sub

Тепер все нормалізується.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave