За да използвате който и да е макрос в Excel, вашите потребители трябва да активират макроси. Тоест, те трябва да дадат разрешение на Excel да изпълнява макроси в тяхната среда. За да активират макроси, потребителите щракват върху бутона Активиране на съдържанието в предупреждението за сигурност, което се появява над лентата с формули.
Изводът е, че можете да напишете всички фантастични макроси в света, но те никога няма да се изпълняват, освен ако вашите потребители не активират макроси. Това повдига въпроса; можете ли да принудите потребителите да активират макроси? Отговорът е да – с малко хитрост.
Идеята е сравнително проста. Създавате лист с име, да речем, СТАРТ. Този лист съдържа само просто предупреждение, че макросите трябва да бъдат активирани. След това скривате всички листове в работната книга с изключение на този START лист. Накрая пишете прост макрос, който показва всички листове, когато работната книга се отвори.
В този момент, когато работната книга е отворена, Excel ще поиска от потребителя да активира макроси. Потребителите ще бъдат принудени да го направят, защото всичко, което ще видят, е вашият начален лист. Другите листове ще бъдат скрити!
За да накарате тази техника да работи, имате нужда от два макроса: един макрос скрива всички освен листа START, когато работната книга се затвори, и друг макрос, който показва всички освен листа START, когато работната книга се отвори.
Първо се заемете с действията, които трябва да се случат, когато работната книга се затвори. :
Активирайте Visual Basic Editor, като натиснете ALT+F11 на клавиатурата си
В прозореца на проекта намерете името на вашия проект/работна книга и щракнете върху знака плюс до него, за да видите всички листове.
Щракнете върху Тази работна книга.
В падащото меню Събитие изберете събитието Преди затваряне.
Въведете или поставете следния код:
Частна под работна книга_BeforeClose(Отказ като булева)
„Стъпка 1: Декларирайте вашите променливи
Dim ws като работен лист
„Стъпка 2: Покажете началния лист
Sheets("START").Visible = xlSheetVisible
„Стъпка 3: Започнете да преглеждате всички работни листове
За всеки ws В тази работна книга.Работни листове
„Стъпка 4: Проверете името на всеки работен лист
Ако ws.Name <> "СТАРТ" Тогава
„Стъпка 5: Скрийте листа
ws.Visible = xlVeryHidden
Край, ако
„Стъпка 6: Преминаване към следващия работен лист
Следващата ws
„Стъпка 7: Запазете работната книга
ActiveWorkbook.Save
Край под
В стъпка 1 декларирате обект, наречен ws, за да създадете контейнер с памет за всеки работен лист, през който ще преминете.
В стъпка 2 гарантирате, че листът START е видим.
В стъпка 3 започвате цикъла, като казвате на Excel, че искате да оцените всички работни листове в тази работна книга.
В стъпка 4 просто сравнявате името START с листа, който в момента се завърта. Тази стъпка гарантира, че следващите действия се прилагат към всички листове с изключение на листа START.
Ако имената на листове са различни, в стъпка 5 скривате листа, като използвате свойството xlVeryHidden. Това свойство не само скрива листа, но също така не позволява на потребителя да го разкрие ръчно с помощта на потребителския интерфейс.
Връщате се назад, за да получите следващия лист в стъпка 6.
В стъпка 7, след като всички листове бъдат оценени, макросът записва работната книга и приключва.
Сега трябва да напишете макрос, който да обработва всички действия, които трябва да се случат, когато работната книга се отвори:
Активирайте редактора на Visual Basic, като натиснете ALT+F11.
В прозореца на проекта намерете името на вашия проект/работна книга и щракнете върху знака плюс до него, за да видите всички листове.
Щракнете върху Тази работна книга.
В падащото меню Събитие изберете Отвори събитие.
Въведете или поставете следния код:
Частна под работна книга_Open()
„Стъпка 1: Декларирайте вашите променливи
Dim ws като работен лист
„Стъпка 2: Започнете да преглеждате всички работни листове
За всеки ws В тази работна книга.Работни листове
„Стъпка 3: Показване на всички работни листове
ws.Visible = xlSheetVisible
„Стъпка 4: Преминаване към следващия работен лист
Следващата ws
„Стъпка 5: Скрийте началния лист
Sheets("START").Visible = xlVeryHidden
Край под
В стъпка 1 декларирате обект, наречен ws, за да създадете контейнер с памет за всеки работен лист, през който преглеждате.
В стъпка 2 започвате цикъла, като казвате на Excel, че искате да оцените всички работни листове в тази работна книга.
В Стъпка 3 разкривате листа, който в момента се завърта. Тази стъпка ефективно показва всички работни листове, тъй като всеки лист е видим.
Връщате се назад, за да получите следващия лист в стъпка 4.
След като всички листове станат видими, стъпка 5 скрива START листа. Отново използвате свойството xlVeryHidden, така че потребителят да не може ръчно да разкрие листа с помощта на потребителския интерфейс.
След като и двата макроса бъдат внедрени, ще имате работна книга, която ще работи само ако потребителят активира макроси!