Урок за макроси Excel VBA за начинаещи с примери

  • Споделя Това
Michael Brown

Съдържание

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

За начинаещите в Excel концепцията за макроси често изглежда непреодолима. Наистина, за да овладеете VBA, може да са необходими месеци или дори години обучение. Това обаче не означава, че не можете да се възползвате от автоматизиращата сила на макросите в Excel веднага. Дори да сте пълен новак в програмирането на VBA, можете лесно да запишете макрос, за да автоматизирате някои от повтарящите се задачи.

Тази статия е входна точка към очарователния свят на макросите на Excel. Тя обхваща основните неща, които трябва да знаете, за да започнете, и предоставя връзки към съответните задълбочени уроци.

    Какво представляват макросите в Excel?

    Макросът на Excel е набор от команди или инструкции, съхранени в работната книга под формата на код VBA. Можете да си го представите като малка програма за изпълнение на предварително определена последователност от действия. Веднъж създадени, макросите могат да се използват повторно по всяко време. При стартиране на макрос се изпълняват командите, които той съдържа.

    Обикновено макросите се използват за автоматизиране на повтарящи се задачи и ежедневни дейности. Умелите разработчици на VBA могат да пишат наистина сложни макроси, които далеч надхвърлят намаляването на броя на натисканията на клавишите.

    Много често можете да чуете хора да наричат "макрос" "VBA". Технически има разлика: макросът е част от кода, а Visual Basic for Applications (VBA) е езикът за програмиране, създаден от Microsoft за писане на макроси.

    Защо да използвате макроси на Excel?

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

    Да речем, че трябва да създадете седмичен отчет за вашия ръководител. За целта импортирате различни аналитични данни от няколко или повече външни ресурса. Проблемът е, че тези данни са разхвърляни, излишни или не са във формат, който Excel може да разбере. Това означава, че трябва да преформатирате дати и числа, да отрежете допълнителните интервали и да изтриете празните места, да копирате и поставите информацията в подходящи колони,Изграждане на диаграми за визуализиране на тенденциите и още много други неща, за да бъде отчетът ви ясен и удобен за потребителя. Сега си представете, че всички тези операции могат да бъдат извършени за вас незабавно с едно кликване на мишката!

    Разбира се, създаването на сложен макрос отнема време. Понякога може да отнеме дори повече време, отколкото ръчното извършване на същите манипулации. Но създаването на макрос е еднократна настройка. Веднъж написан, изчистен и тестван, кодът VBA ще свърши работата бързо и безупречно, като сведе до минимум човешките грешки и скъпоструващите грешки.

    Как да създадете макрос в Excel

    Има два начина за създаване на макроси в Excel - чрез записващото устройство за макроси и редактора на Visual Basic.

    Съвет. В Excel повечето операции с макроси се извършват чрез Разработчик така че не забравяйте да добавите раздела Developer в лентата на Excel.

    Записване на макрос

    Дори и да не знаете нищо за програмирането като цяло и по-специално за VBA, можете лесно да автоматизирате част от работата си, като просто позволите на Excel да записва действията ви като макрос. Докато изпълнявате действията, Excel внимателно наблюдава и записва вашите кликвания с мишката и натискания на клавишите на езика VBA.

    Записвачът на макроси улавя почти всичко, което правите, и създава много подробен (често излишен) код. След като спрете записа и запазите макроса, можете да прегледате кода му в редактора на Visual Basic и да направите малки промени. Когато стартирате макроса, Excel се връща към записания VBA код и изпълнява точно същите движения.

    За да започнете запис, щракнете върху Записване на макрос на бутона Разработчик или раздела Статус бар.

    За подробна информация вижте Как да записваме макрос в Excel.

    Писане на макрос в редактора на Visual Basic

    Редакторът на Visual Basic for Applications (VBA) е мястото, където Microsoft Excel съхранява кода на всички макроси, както записани, така и написани ръчно.

    В редактора VBA можете не само да програмирате последователност от действия, но и да създавате потребителски функции, да показвате собствени диалогови прозорци, да оценявате различни условия и най-важното - да кодирате логиката! Естествено, създаването на собствен макрос изисква известни познания за структурата и синтаксиса на езика VBA, което е извън обхвата на този урок за начинаещи.ви предпазва от повторното използване на чужд код (например този, който сте намерили в нашия блог :) и дори един напълно начинаещ в Excel VBA не би трябвало да има трудности с това!

    Първо, натиснете Alt + F11, за да отворите редактора на Visual Basic. И след това въведете кода в тези две бързи стъпки:

    1. В Проучвателя на проекти вляво щракнете с десния бутон на мишката върху целевата работна книга, след което щракнете върху Вмъкване на > Модул .
    2. В прозореца Код вдясно поставете кода VBA.

    След като приключите, натиснете F5, за да стартирате макроса.

    За подробни стъпки вижте Как да вмъкнем VBA код в Excel.

    Как да стартирате макроси в Excel

    Има няколко начина за стартиране на макрос в Excel:

    • За да стартирате макрос от работен лист, щракнете върху Макроси на бутона Разработчик или натиснете клавишната комбинация Alt + F8.
    • За да стартирате макрос от редактора VBA, натиснете:
      • F5, за да стартирате целия код.
      • F8, за да преминете през кода ред по ред. Това е много полезно за тестване и отстраняване на неизправности.

    Освен това можете да стартирате макрос, като щракнете върху потребителски бутон или натиснете зададения пряк път. За повече подробности вижте Как да стартирате макроси в Excel.

    Как да активирате макроси в Excel

    От съображения за сигурност всички макроси в Excel са деактивирани по подразбиране. За да използвате магията на кодовете VBA във ваша полза, трябва да знаете как да ги активирате.

    Най-лесният начин да включите макросите за определена работна книга е да щракнете върху Разрешаване на съдържанието в жълтата предупредителна лента за сигурност, която се появява в горната част на листа при първото отваряне на работна книга с макроси.

    За да научите повече за сигурността на макросите, вижте Как да разрешавате и забранявате макроси в Excel.

    Как да промените макронастройките

    Microsoft Excel определя дали да разреши или забрани изпълнението на VBA кодове в работните ви книги въз основа на макронастройката, избрана в Център за доверие .

    Ето какви са стъпките за достъп до макронастройките на Excel и за тяхната промяна, ако е необходимо:

    1. Отидете в Файл и изберете Опции .
    2. В лявата страна на прозореца изберете Център за доверие , след което щракнете върху Настройки на Trust Center... .
    3. В Център за доверие диалогов прозорец, щракнете върху Настройки на макроси вляво, изберете желаната опция и щракнете върху ОК .

    На скрийншота по-долу е избрана макронастройката по подразбиране:

    За повече информация вижте Обяснение на макрос настройките на Excel.

    Как да преглеждате, редактирате и отстранявате грешки в кодове VBA в Excel

    Всички промени в кода на макроса, независимо дали е генериран автоматично от макрорекордера на Excel или е написан от вас, се извършват в редактора Visual Basic.

    За да отворите редактора VB, натиснете Alt + F11 или щракнете върху Visual Basic на бутона Разработчик таб.

    За преглед и редактиране кода на конкретен макрос, в Проект Explorer вляво, щракнете два пъти върху модула, който го съдържа, или щракнете с десния бутон върху модула и изберете Вижте кода . Това отваря прозореца Код, в който можете да редактирате кода.

    За тестване и отстраняване на грешки Това ще ви преведе през кода на макроса ред по ред, като ви позволи да видите ефекта, който всеки ред има върху работния лист. Редът, който се изпълнява в момента, е осветен в жълто. Нулиране на в лентата с инструменти (син квадрат).

    Как да копирате макрос в друга работна книга

    Създали сте макрос в една работна книга и сега искате да го използвате отново и в други файлове? Има два начина за копиране на макрос в Excel:

    Копиране на модула, съдържащ макрос

    В случай че целевият макрос се намира в отделен модул или всички макроси в модула са полезни за вас, тогава има смисъл да копирате целия модул от една работна книга в друга:

    1. Отворете двете работни книги - тази, която съдържа макроса, и тази, в която искате да го копирате.
    2. Отворете редактора на Visual Basic.
    3. В прозореца Проучвател на проекта намерете модула, съдържащ макроса, и го плъзнете към целевата работна книга.

    На скрийншота по-долу копираме Модул1 от Книга1 към Книга2 :

    Копиране на изходния код на макрос

    Ако модулът съдържа много различни макроси, а вие се нуждаете само от един, копирайте само кода на конкретния макрос. Ето как:

    1. Отворете двете работни книги.
    2. Отворете редактора на Visual Basic.
    3. В прозореца Проучвател на проекта щракнете двукратно върху модула, съдържащ макроса, който искате да копирате, за да отворите неговия прозорец Код.
    4. В прозореца Код намерете целевия макрос, изберете неговия код (започващ с Под и завършващи с Край на Sub ) и натиснете Ctrl + C, за да го копирате.
    5. В Проучвателя на проекта намерете целевата работна книга и след това вмъкнете нов модул в нея (щракнете с десния бутон на мишката върху работната книга и щракнете върху Вмъкване на > Модул ) или щракнете двукратно върху съществуващ модул, за да отворите прозореца му Code.
    6. В прозореца Code (Код) на целевия модул натиснете Ctrl + V, за да поставите кода. Ако модулът вече съдържа някакъв код, превъртете надолу до последния ред код и след това поставете копирания макрос.

    Как да изтриете макроси в Excel

    Ако вече не се нуждаете от определен VBA код, можете да го изтриете с помощта на Macro диалоговия прозорец или редактора на Visual Basic.

    Изтриване на макрос от работна книга

    За да изтриете макрос директно от работната си книга на Excel, изпълнете следните стъпки:

    1. На Разработчик в раздела Код щракнете върху групата Макроси или натиснете клавишната комбинация Alt + F8.
    2. В Macro диалогов прозорец, изберете макроса, който искате да премахнете, и щракнете върху Изтриване на .

    Съвети:

    • За да видите всички макроси във всички отворени файлове, изберете Всички отворени работни книги от Макроси в падащ списък.
    • За да можете да изтриете макрос в работната книга Personal Macro, първо трябва да премахнете скриването на Personal.xlsb.

    Изтриване на макрос чрез редактора на Visual Basic

    Предимството на използването на редактора VBA е, че той ви позволява да изтриете с един замах целия модул с всички макроси, които той съдържа. Също така редакторът VBA позволява изтриването на макроси в работната книга с лични макроси, без да я скривате.

    За постоянно изтриване на модул , изпълнете следните стъпки:

    1. В Проект Explorer , щракнете с десния бутон на мишката върху модула и изберете Премахване на от контекстното меню.
    2. Когато ви попитат дали искате да експортирате модула, преди да го премахнете, щракнете върху Не .

    За премахване на определен макрос , просто изтрийте изходния му код директно в прозореца Код. Или можете да изтриете макрос, като използвате бутона Инструменти в менюто на редактора VBA:

    1. От Инструменти меню, изберете Макроси . Макроси ще се появи диалогов прозорец.
    2. В Макроси В Изберете проекта, който съдържа нежелания макрос.
    3. В Име на макроса изберете макроса.
    4. Щракнете върху Изтриване на бутон.

    Как да запазвате макроси в Excel

    За да запазите макрос в Excel, записан или написан ръчно, просто запазете работната книга като разрешен макрос (*.xlms). Ето как:

    1. Във файла, съдържащ макроса, щракнете върху Запазете или натиснете Ctrl + S .
    2. Сайтът Запазване като Ще се появи диалогов прозорец. Работна книга на Excel с активирани макроси (*.xlsm) от Запазване като тип падащия списък и щракнете върху Запазете :

    Как да експортирате и импортирате макроси в Excel

    Ако искате да споделите с някого своите VBA кодове или да ги преместите на друг компютър, най-бързият начин е да експортирате целия модул като .bas файл.

    Експортиране на макроси

    За да експортирате кодовете си във VBA, трябва да направите следното:

    1. Отворете работната книга, съдържаща макросите.
    2. Натиснете Alt + F11, за да отворите редактора на Visual Basic.
    3. В Проучвателя на проекта щракнете с десния бутон на мишката върху модула, съдържащ макросите, и изберете Експортиране на файл .
    4. Навигирайте до папката, в която искате да запазите експортирания файл, дайте име на файла и щракнете върху Запазете .

    Импортиране на макроси

    За да импортирате .bas файл с VBA кодове в Excel, следвайте следните стъпки:

    1. Отворете работната книга, в която искате да импортирате макроси.
    2. Отворете редактора на Visual Basic.
    3. В Project Explorer щракнете с десния бутон върху името на проекта и изберете Импортиране на файл .
    4. Навигирайте до .bas файла и щракнете върху Отвори .

    Примери за макроси на Excel

    Един от най-добрите начини за изучаване на Excel VBA е чрез разглеждане на примерни кодове. По-долу ще намерите примери за много прости VBA кодове, които автоматизират някои основни операции. Разбира се, тези примери няма да ви научат на кодиране, за това съществуват стотици професионални уроци по VBA. Ние просто се стремим да илюстрираме няколко общи характеристики на VBA, които, надяваме се, ще направят философията му малко по-позната завие.

    Скриване на всички листове в работна книга

    В този пример използваме ActiveWorkbook за връщане на активната в момента работна книга и За всеки цикъл, за да преминем един по един през всички листове в работната книга. За всеки намерен лист задаваме Видим към xlSheetVisible .

    Sub Unhide_All_Sheets() Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Visible = xlSheetVisible Next wks End Sub

    Скрийте активния работен лист или го направете много скрит

    За да манипулирате активния в момента лист, използвайте ActiveSheet Този примерен макрос променя Видими на активния лист към xlSheetHidden за да го скриете. За да направите листа много скрит, задайте Видим към xlSheetVeryHidden .

    Sub Hide_Active_Sheet() ActiveSheet.Visible = xlSheetHidden End Sub

    Отмяна на сливането на всички обединени клетки в избрания диапазон

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

    Sub Unmerge_Cells() Selection.Cells.UnMerge End Sub

    Показване на поле за съобщения

    За да покажете някакво съобщение на потребителите си, използвайте MsgBox Ето един пример за такъв макрос в най-простия му вид:

    Sub Show_Message() MsgBox ("Hello World!" ) End Sub

    В реалните макроси полето за съобщения обикновено се използва за информация или потвърждение. Например, преди да извършите действие (в нашия случай - обединяване на клетки), показвате Да/Не Ако потребителят щракне върху "Да", избраните клетки ще бъдат отстранени.

    Sub Unmerge_Selected_Cells() Dim Answer As String Answer = MsgBox( "Сигурни ли сте, че искате да разедините тези клетки?" , vbQuestion + vbYesNo, "Unmerge Cells" ) If Answer = vbYes Then Selection.Cells.UnMerge End If End Sub

    За да тествате кода, изберете един или повече диапазони, съдържащи обединени клетки, и стартирайте макроса. Ще се появи следното съобщение:

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

    • Макрос за копиране на листове от няколко работни книги в една
    • Макроси за дублиране на листове в Excel
    • Макроси за подреждане на разделите по азбучен ред в Excel
    • Макрос за премахване на защитата на листа без парола
    • Макрос за броене и сумиране на условно оцветени клетки
    • Макрос за преобразуване на числа в думи
    • Макрос за скриване на всички работни листове освен активния лист
    • Макроси за премахване на скриването на листове
    • Макрос за скриване на всички колони
    • Макроси за много скрити листове
    • Макрос за премахване на всички прекъсвания на редове в активен лист
    • Макроси за изтриване на празни редове
    • Макрос за изтриване на всеки втори ред
    • Макрос за премахване на празни колони
    • Макрос за вмъкване на всяка втора колона
    • Макроси за проверка на правописа в Excel
    • Макрос за транспониране на колони в редове
    • Макрос за обръщане на колони в Excel
    • Макроси за задаване на област за печат
    • Макроси за вмъкване на прекъсвания на страници

    Как да защитите макросите на Excel

    Ако искате да предотвратите преглеждането, модифицирането или изпълнението на макроса от други лица, можете да го защитите с парола.

    Заключване на макрос за преглед

    За да защитите VBA кодовете си от неоторизирано разглеждане и редактиране, направете следното:

    1. Отворете редактора VBA.
    2. В Проучвателя на проекти щракнете с десния бутон върху проекта, който искате да заключите, и изберете VBAProject Свойства...
    3. В Свойства на проекта диалогов прозорец, в Защита проверете раздела Заключване на проекта за преглед въведете паролата два пъти и щракнете върху ОК .
    4. Запазете, затворете и отворете отново файла на Excel.

    Когато се опитате да видите кода в редактора Visual Basic, ще се появи следният диалогов прозорец. Въведете паролата и щракнете върху OK.

    За отключване на макроси , просто отворете Свойства на проекта диалоговия прозорец отново и премахнете отметката от Заключване на проекта за преглед кутия.

    Забележка: Този метод защитава кода от преглеждане и редактиране, но не го предпазва от изпълнение.

    Защита на макроса от стартиране с парола

    За да защитите макроса си от изпълнение, така че само потребителите, които знаят паролата, да могат да го стартират, добавете следния код, като замените думата "password" с истинската си парола:

    Sub Password_Protect() Dim password As Variant password = Application.InputBox( "Please enter Password" , "Password Protected Macro" ) Select Case password Case Is = False 'не прави нищо Case Is = "password" 'вашият код тук Case Else MsgBox "Incorrect Password" End Select End Sub

    Макросът използва InputBox функция, за да подкани потребителя да въведе парола:

    Ако въведените от потребителя данни съвпадат с твърдо кодираната парола, кодът ви се изпълнява. Ако паролата не съвпада, се показва полето със съобщение "Incorrect Password" (Неправилна парола). За да предотвратите възможността потребителят да прегледа паролата в редактора на Visual Basic, не забравяйте да заключите макроса за преглед, както е обяснено по-горе.

    Забележка: Като се има предвид броят на различните програми за разбиване на пароли, достъпни в интернет, е важно да се разбере, че тази защита не е абсолютна. Можете да я разглеждате по-скоро като защита срещу случайно използване.

    Съвети за макроси на Excel

    Професионалистите в Excel VBA са измислили множество гениални трикове, за да направят своите макроси по-ефективни. По-долу ще споделя няколко от моите любими трикове.

      Ако кодът ви във VBA активно манипулира съдържанието на клетката, можете да ускорите изпълнението му, като изключите опресняването на екрана и преизчисляването на формулата. След като изпълните кода си, включете това отново.

      Следните редове трябва да се добавят в началото на кода (след редовете, които започват с Dim или след Под линия):

      Application.ScreenUpdating = False Application.Calculation = xlCalculationManual

      Следните редове трябва да се добавят в края на кода (преди Край на Sub ):

      Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic

      Как да разделите кода на VBA на няколко реда

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

      За да разделите дълго изявление на няколко реда, въведете пространство последвано от Подчертаване (_) в точката, в която искате да прекъснете реда. Във VBA това се нарича символ за прекратяване на ред .

      За да продължите правилно кода на следващия ред, спазвайте следните правила:

      • Не разделяйте кода в средата на имената на аргументите.
      • Не използвайте подчертаване за прекъсване на коментарите. За коментари от няколко реда въведете апостроф (') в началото на всеки ред.
      • Подчертаването трябва да бъде последният символ на реда, който не е последван от нищо друго.

      Следващият пример за код показва как да разделите декларацията на два реда:

      Answer = MsgBox("Сигурни ли сте, че искате да разедините тези клетки?" , _ vbQuestion + vbYesNo, "Unmerge Cells" )

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

      Когато напишете или запишете макрос в Excel, обикновено той може да бъде достъпен само от конкретната работна книга. Ако искате да използвате повторно същия код в други работни книги, запишете го в работната книга "Лични макроси". Това ще направи макроса достъпен за вас всеки път, когато отворите Excel.

      Единствената пречка е, че личната работна книга за макроси не съществува в Excel по подразбиране. За да я създадете, ще трябва да запишете поне един макрос. Следващият урок предоставя всички подробности: Лична работна книга за макроси в Excel

      Как да отмените действие на макрос

      След изпълнение на макрос действието му не може да бъде върнато чрез натискане на Ctrl + Z, нито чрез щракване върху Отмяна на бутон.

      Опитните VBA програмисти могат, разбира се, да потвърдят входните стойности и/или началните условия, преди да позволят на макроса да направи промени в работния лист, но в повечето случаи това е доста сложно.

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

      ActiveWorkbook.Save

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

      По този начин, ако вие (или вашите потребители) не сте доволни от резултатите, можете просто да затворите и след това отново да отворите работната книга.

      Спиране на Excel от показване на предупреждение за сигурност, когато в работната книга няма макроси

      Случвало ли ви се е да попаднете в ситуация, в която Excel непрекъснато ви пита дали искате да разрешите макроси, докато вие със сигурност знаете, че в тази конкретна работна книга няма макроси?

      Най-вероятната причина е, че е бил добавен и след това премахнат някакъв VBA код, като е останал празен модул, който задейства предупреждението за сигурност. За да се отървете от него, просто изтрийте модула, запазете работната книга, затворете я и я отворете отново. Ако това не помогне, направете следното:

      • За Тази работна книга и за всеки отделен лист отворете прозореца Code, натиснете Ctrl + A, за да изберете целия код и да го изтриете (дори ако прозорецът Code изглежда празен).
      • Изтрийте всички UserForms и Class Modules, които съдържа работната книга.

      Ето как се създават и използват макроси VBA в Excel. Благодаря ви, че прочетохте, и се надявам да се видим отново в нашия блог следващата седмица!

      Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.