Когато станете опитни с Excel VBA, прекарвате много време в работа в прозорци с код. Макросите, които записвате, се съхраняват в модул и можете да въведете Excel VBA код директно във VBA модул.
Минимизиране и максимизиране на VBA кодови прозорци
Ако имате няколко отворени проекта, VBE може да има много прозорци с код по всяко време.
Претоварването на прозореца с код не е приятна гледка.
Прозорците на кода са много като прозорците на работни книги в Excel. Можете да ги сведете до минимум, да ги увеличите, да ги преоразмерите, да ги скриете, да ги пренаредите и т.н. Повечето хора намират за много по-лесно да увеличат максимално прозореца на кода, върху който работят. Това ви позволява да видите повече код и ви предпазва от разсейване.
За да увеличите максимално прозорец с код, щракнете върху бутона Увеличи в заглавната му лента (точно до X). Или просто щракнете двукратно върху заглавната лента, за да я увеличите. За да възстановите прозорец с код до оригиналния му размер, щракнете върху бутона Възстановяване. Когато прозорецът е максимизиран, неговата заглавна лента не се вижда, така че ще намерите бутона Възстановяване под заглавната лента на VBE.
Понякога може да искате да имате видими два или повече прозореца на кода. Например, може да искате да сравните кода в два модула или да копирате код от един модул в друг. Можете да подредите прозорците ръчно или да изберете Прозорец → Плочка хоризонтално или Прозорец → Плочка вертикално, за да ги подредите автоматично.
Можете бързо да превключвате между прозорците на кода, като натиснете Ctrl+F6. Ако повторите тази комбинация от клавиши, продължавате да преминавате през всички отворени прозорци с кодове. Натискането на Ctrl+Shift+F6 преминава през прозорците в обратен ред. (За повече информация вижте тези клавишни комбинации на Excel VBA .)
Минимизирането на прозорец с код го премахва. Можете също да щракнете върху бутона Затваряне на прозореца (който показва X) в заглавната лента на прозорец с код, за да затворите прозореца. (Затварянето на прозорец просто го скрива; няма да загубите нищо.) За да го отворите отново, просто щракнете двукратно върху съответния обект в прозореца на проекта. Между другото, работата с тези кодови прозорци звучи по-трудно, отколкото е в действителност.
Създаване на VBA модул
Като цяло модулът на Excel VBA може да съдържа три типа код:
- Декларации: Един или повече изявления за информация, които предоставяте на VBA. Например, можете да декларирате типа данни за променливите, които планирате да използвате, или да зададете някои други опции за целия модул. Декларациите са основно декларации за домакинство. Те всъщност не са екзекутирани.
- Подпроцедури: Набор от инструкции за програмиране, които при изпълнение изпълняват някакво действие.
- Функционални процедури: Набор от инструкции за програмиране, които връщат една стойност (подобно по концепция на функция на работен лист, като SUM).
Един VBA модул може да съхранява произволен брой подпроцедури, функционални процедури и декларации. Е, има е ограничение - около 64,000 знака на модул. Малко вероятно е дори да се доближите до ограничението от 64 000 знака. Но ако сте го направили, решението е просто: Просто поставете нов модул.
Как да организирате VBA модул зависи изцяло от вас. Някои хора предпочитат да запазят целия си VBA код за приложение в един VBA модул; други обичат да разделят кода на няколко модула. Това е личен избор, точно като подреждането на мебели.
Получаване на VBA код в модул
Празният VBA модул е като фалшивата храна, която виждате на витрините на някои китайски ресторанти; изглежда добре, но всъщност не ви прави много. Преди да можете да направите нещо смислено, трябва да имате някакъв VBA код във VBA модула. Можете да получите VBA код в VBA модул по три начина:
- Въведете кода директно.
- Използвайте макрорекордера на Excel, за да запишете вашите действия и да преобразувате тези действия във VBA код.
- Копирайте кода от един модул и го поставете в друг.
Директно въвеждане на Excel VBA код
Понякога най-добрият маршрут е най-прекият. Директното въвеждане на код включва... добре, директно въвеждане на кода. С други думи, въвеждате кода с помощта на клавиатурата си. Въвеждането и редактирането на текст в VBA модул работи както бихте очаквали. Можете да избирате, копирате, изрязвате, поставяте и правите други неща с текста.
Използвайте клавиша Tab, за да направите отстъп на някои от редовете, за да направите кода си по-лесен за четене. Отстъпът не е необходим, но е добър навик за придобиване. Докато изучавате кодирането на Excel VBA, ще разберете защо отстъпът на кодовите редове е полезен.
Един ред от VBA код може да бъде толкова дълъг, колкото е необходимо. Въпреки това, може да искате да използвате символите за продължаване на реда, за да разделите дълги редове код. За да продължите един ред код (известен също като израз) от един ред на следващия, завършете първия ред с интервал, последван от долно черта (_). След това продължете изявлението на следващия ред. И не забравяйте пространството. Подчертаване, което не е предшествано от интервал, няма да свърши работа.
Ето пример за едно изявление, разделено на три реда:
Selection.Sort Key1:=Обхват("A1"), _
Поръчка1:=xlВъзходяща, Заглавка:=xlGuess, _
Ориентация:=xlTopToBottom
Този израз би действал точно по същия начин, ако беше въведен в един ред (без символи за продължаване на реда). Обърнете внимание, че вторият и третият ред на това изявление са с отстъп. Отстъпът не е задължителен, но помага да се изясни фактът, че тези редове не са отделни изрази.
Инженерите с бяло покритие, които проектираха VBE, очакваха, че хората ще правят грешки. Следователно VBE има множество нива на отмяна и повторение. Ако сте изтрили изявление, което не трябва да имате, щракнете върху бутона Отмяна на лентата с инструменти (или натиснете Ctrl+Z), докато изявлението се покаже отново. След като отмените, можете да щракнете върху бутона Възстановяване, за да извършите промените, които сте отменили.
Готови ли сте да въведете някакъв реален код? Опитайте следните стъпки:
Създайте нова работна книга в Excel.
Натиснете Alt+F11, за да активирате VBE.
Щракнете върху името на новата работна книга в прозореца на проекта.
Изберете Вмъкване → Модул, за да вмъкнете VBA модул в проекта.
Въведете следния код в модула:
Sub GuessName()
Msg = "Вашето име " & Application.UserName & "?"
Ans = MsgBox(Msg, vbYesNo)
Ако Ans = vbNo Тогава MsgBox "О, няма значение."
Ако Ans = vbYes Тогава MsgBox "Трябва да съм екстрасенс!"
Край под
Позиционирайте курсора навсякъде в текста, който сте въвели, и натиснете F5, за да изпълните процедурата.
F5 е пряк път за Run → Run Sub/UserForm. Ако сте въвели кода правилно, Excel изпълнява процедурата и можете да отговорите на простия диалогов прозорец. Текстът в диалоговия прозорец ще бъде различен от текста, показан тук.
Процедурата GuessName показва този диалогов прозорец.
Когато въведете кода, посочен в стъпка 5, може да забележите, че VBE прави някои корекции на текста, който въвеждате. Например, след като въведете израза Sub, VBE автоматично вмъква End Sub израза. И ако пропуснете интервала преди или след знак за равенство, VBE вмъква интервала вместо вас. Също така, VBE променя цвета и главни букви на някои текст. Всичко това е напълно нормално. Това е просто начинът на VBE да поддържа нещата спретнати и четими.
Ако сте следвали предишните стъпки, току-що написахте VBA Sub процедура, известна още като макрос. Когато натиснете F5, Excel изпълнява кода и следва инструкциите. С други думи, Excel оценява всяко изявление и прави това, което сте му казали да направи. (Не позволявайте на тази новооткрита сила да ви хрумне.) Можете да изпълните този макрос произволен брой пъти — въпреки че има тенденция да губи привлекателността си след няколко десетки пъти.
За протокола този прост макрос на Excel използва следните концепции:
- Дефиниране на подпроцедура (първи ред)
- Присвояване на стойности на променливи (Msg и Ans)
- Конкатениране (присъединяване) на низ (с помощта на оператора &)
- Използване на вградена VBA функция (MsgBox)
- Използване на вградени VBA константи (vbYesNo, vbNo и vbYes)
- Използване на конструкция If-Then (два пъти)
- Завършване на подпроцедура (последният ред)
Използване на макрорекордера на Excel VBA
Друг начин да получите код в VBA модул е като запишете вашите действия, като използвате макрорекордера на Excel.
Между другото, няма абсолютно никакъв начин да запишете процедурата GuessName, показана по-горе. Можете да записвате само неща, които можете да правите директно в Excel. Показването на кутия за съобщения не е в нормалния репертоар на Excel. (Това е нещо от VBA.) Записващото устройство на макроси е полезно, но в много случаи вероятно ще трябва да въведете поне някакъв код ръчно.
Ето пример стъпка по стъпка, който показва как да запишете макрос, който вмъква нов работен лист и скрива всички освен първите десет реда и всички освен първите десет колони. Ако искате да опитате този пример, започнете с нова, празна работна книга на Excel и следвайте тези стъпки:
Активирайте работен лист в работната книга.
Всеки работен лист на Excel ще свърши работа.
Щракнете върху раздела Разработчик и се уверете, че Използване на относителни препратки не е маркирано.
Този макрос се записва с помощта на абсолютни препратки.
Изберете Разработчик → Код → Запис на макрос или щракнете върху иконата до индикатора Готов в левия край на лентата на състоянието.
Excel показва диалоговия прозорец за запис на макрос.
В диалоговия прозорец Запис на макрос дайте име на макроса TenByTen, посочете, че искате макросът да се съхранява в Тази работна книга, и натиснете Shift+T за клавиша за бърз достъп.
Макросът може да се изпълни, когато натиснете Ctrl+Shift+T.
Щракнете върху OK, за да започнете да записвате. Excel автоматично вмъква нов VBA модул в проекта, който съответства на активната работна книга.
От този момент нататък Excel преобразува вашите действия във VBA код. Докато записвате, иконата в лентата на състоянието се превръща в малък квадрат. Това е напомняне, че записът на макроси работи. Можете също да щракнете върху тази икона, за да спрете записа на макроси.
Щракнете върху иконата Нов лист вдясно от последния раздел на лист.
Excel вмъква нов работен лист.
Изберете цялата колона K (11-та колона) и натиснете Ctrl+Shift+стрелка надясно; след това щракнете с десния бутон върху избрана колона и изберете Скрий от контекстното меню.
Excel скрива всички избрани колони.
Изберете целия ред 11 и натиснете Ctrl+Shift+стрелка надолу; след това щракнете с десния бутон върху произволен избран ред и изберете Скрий от контекстното меню.
Excel скрива всички избрани колони.
Изберете клетка A1.
Изберете Разработчик → Код → Спиране на записа или щракнете върху бутона Спиране на записа в лентата на състоянието (малкия квадрат). Excel спира да записва вашите действия.
За да видите този новозаписан макрос, натиснете Alt+F11, за да активирате VBE. Намерете името на работната книга в прозореца на проекта. Виждате, че проектът има посочен нов модул. Името на модула зависи от това дали сте имали други модули в работната книга, когато сте започнали да записвате макроса. Ако не сте го направили, модулът се казва Module1. Можете да щракнете двукратно върху модула, за да видите прозореца с код за модула.
Ето кода, генериран от вашите действия:
Под TenByTen()
'
' TenByTen макрос
'
' Клавишна комбинация: Ctrl+Shift+T
'
Sheets.Add After:=ActiveSheet
Колони("K:K").Изберете
Диапазон(Избор, Избор. Край(xlToRight)).Избор
Selection.EntireColumn.Hidden = Вярно
Редове("11:11"). Изберете
Диапазон(Избор, Избор. Край(xlDown)).Избор
Selection.EntireRow.Hidden = Вярно
Диапазон("A1").Изберете
Край под
За да опитате този макрос, активирайте всеки работен лист и натиснете клавиша за бърз достъп, който сте задали в стъпка 4: Ctrl+Shift+T.
Ако не сте задали клавиш за бърз достъп на макроса, не се притеснявайте. Ето как да покажете списък с всички налични макроси и да стартирате този, който искате:
Изберете Разработчик → Код → Макроси. Вентилаторите на клавиатурата могат да натискат Alt+F8.
Всеки от тези методи показва диалогов прозорец, който изброява всички налични макроси.
Изберете макроса в списъка (в този случай TenByTen).
Щракнете върху бутона Run.
Excel изпълнява макроса и получавате нов работен лист с десет видими реда и десет видими колони.
Можете да изпълнявате произволен брой команди и да извършвате произволен брой действия, докато записващото устройство на макроси работи. Excel прилежно превежда вашите действия с мишката и натискания на клавиши във VBA код.
И, разбира се, можете също да редактирате макроса, след като го запишете. За да тествате новите си умения, опитайте да редактирате макроса, така че да вмъкне работен лист с девет видими реда и колони – идеално за пъзел Судоку.
Копиране на VBA код
Последният метод за получаване на код в VBA модул е да го копирате от друг модул или от друго място (като уебсайт). Например процедура под или функция, която пишете за един проект, може да бъде полезна и в друг проект. Вместо да губите време за повторно въвеждане на кода, можете да активирате модула и да използвате нормалните процедури за копиране и поставяне на клипборда. (Вероятно ви харесват клавишните комбинации Ctrl+C за копиране и Ctrl+V за поставяне.) След като поставите кода в VBA модул, можете да промените кода, ако е необходимо.
Между другото, в мрежата ще намерите много примери за VBA код. Ако искате да ги изпробвате, изберете кода в браузъра си и натиснете Ctrl+C, за да го копирате. След това активирайте модул и натиснете Ctrl+V, за да го поставите.
Когато копирате код от уебсайт, той понякога изисква известно коригиране. Например знаците за кавички могат да бъдат „интелигентни кавички“ и те трябва да бъдат преобразувани в прости знаци за кавички. И понякога дълги опашки се увиват. Грешните твърдения са лесни за забелязване във VBE, защото се появяват в червено.