Основи на VBA програмирането. Написване на проста процедура във Visual Basic за приложение. Извикване на VBA процедура "Sub" от друга процедура

Има ситуации, когато VBA програма трябва да извърши един и същ набор от действия няколко пъти подред (тоест да повтори един и същ блок от код няколко пъти). Това може да стане с помощта на VBA цикли.

VBA циклите включват:

  • За цикъл
  • Правете цикъл Докато
  • Направете до цикъл

Операторът за цикъл "For" в Visual Basic

Структурата на оператора на цикъла Завъв Visual Basic може да бъде организиран в една от двете форми: като цикъл За… Следващотоили като цикъл За всеки.

Цикъл "За ... Следващ"

Цикъл За… Следващотоизползва променлива, която последователно взема стойности от даден диапазон. При всяка промяна на стойността на променливата се извършват действията, включени в тялото на цикъла. Това е лесно да се разбере от прост пример:

За i = 1 до 10 Общо = Общо + iArray (i) Следващо i

В това прост цикъл За… Следващотосе използва променлива и, който последователно приема стойностите 1, 2, 3, ... 10 и за всяка от тези стойности се изпълнява VBA кодът вътре в цикъла. По този начин този цикъл сумира елементите на масива. iArrayв променлива Обща сума.

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

За d = 0 до 10 Стъпка 0.1 dTotal = dTotal + d Следващо d

Тъй като в горния пример стъпката на нарастване е зададена равна на 0.1 , след това променливата dОбщоза всяко повторение на цикъла приема стойностите 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

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

За i = 10 до 1 стъпка -1 iArray (i) = i Next i

Тук е увеличението -1 , така че променливата ис всяко повторение на цикъла приема стойностите 10, 9, 8, ... 1.

Цикъл "За всеки"

Цикъл За всекиподобно на цикъл За… Следващото, но вместо да се повтаря последователността от стойности за променливата на брояча, цикълът За всекиизпълнява набор от действия за всеки обект от посочената група обекти. В следващия пример, с помощта на цикъл За всекиизброява всички листове в текущата работна книга на Excel:

Dim wSheet като работен лист за всеки wSheet в работни листове MsgBox "Намерен лист:" & wSheet.Name Следващ wSheet

Изявление за прекъсване на цикъла "Изход за"

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

Приложение на оператора Изход задемонстрирано в следния пример. Тук цикълът итерира над 100 записа в масива и сравнява всеки със стойността на променливата dVal... Ако бъде намерено съвпадение, тогава цикълът се прекратява:

За i = 1 до 100 Ако dValues ​​(i) = dVal Тогава IndexVal = i Изход за край, ако следващ i

Цикълът Do While във Visual Basic

Цикъл Правете докатоизпълнява блок от код, стига определеното условие да е изпълнено. По-долу е даден пример за процедура под, в който с помощта на цикъла Правете докатоЧислата на Фибоначи, които не надвишават 1000, се показват последователно:

"Подпроцедура извежда числа на Фибоначи, ненадвишаващи 1000 Sub Fibonacci () Dim i As Integer", брояч за указване на позицията на елемент в последователността Dim iFib As Integer "съхранява текущата стойност на последователността Dim iFib_Next As Integer" съхранява следващата стойност на последователността Dim iStep As Integer "съхранява размера на следващото увеличение "инициализира променливите i и iFib_Next i = 1 iFib_Next = 0" Do While цикълът ще се изпълнява, докато стойността "на текущото число на Фибоначи надвиши 1000 Do While iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

В дадения пример условието iFib_Next< 1000 проверява се в началото на цикъла. Следователно, ако първата стойност iFib_Nextще бъде повече от 1000, тогава цикълът никога няма да бъде изпълнен.

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

Такъв цикъл е схематично Правете докатос проверено условие в края ще изглежда така:

Направете ... Цикъл Докато iFib_Next< 1000

Цикълът Do Until във Visual Basic

Цикъл Правете домного подобен на цикъл Правете докато: блокът от код в тялото на цикъла се изпълнява отново и отново, докато определеното условие не бъде изпълнено (резултатът от условния израз е Вярно). В следващата процедура подс помощта на цикъл Правете доизвлича стойности от всички клетки в колона Аработен лист, докато има празна клетка в колоната:

IRow = 1 Do Until IsEmpty (Cells (iRow, 1)) „Стойността на текущата клетка се съхранява в масива dCellValues ​​dCellValues ​​(iRow) = клетки (iRow, 1) .Стойност iRow = iRow + 1 цикъл

В горния пример, условието IsEmpty (клетки (iRow, 1))е в началото на строителството Правете доследователно, цикълът ще бъде изпълнен поне веднъж, ако първата взета клетка не е празна.

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

Направете ... Цикъл до изпразване (клетки (iRow, 1))

Урокът е подготвен за вас от екипа на сайта office-guru.ru
Източник: /> Превод: Антон Андронов

Още уроци за Microsoft Excel

Цикълът For във VBA е един от най-популярните цикли в Excel. Този цикъл има две форми - За Следващияи За всеки В Следващ.Тези оператори се използват за последователно придвижване през списък с елементи или числа. За да прекратим цикъла, можем да използваме командата exit по всяко време. Нека разгледаме по-отблизо всеки един от тези цикли.

VBA за следващия цикъл

Цикълът For Next има следния синтаксис:

Това, което правим тук, е по същество да създадем цикъл, който използва променлива броячкато пазител на времето. Задаваме стойността му равна на start_counterи увеличавайте (или намалявайте) с 1 по време на всеки цикъл. Цикълът ще работи до стойността броячняма да бъдат равни краен_брояч.Когато и двете стойности съвпадат, цикълът ще се изпълни за последен път и ще спре.

Пример за цикъл

броячще бъде равно на 11

VBA For Loop с изявление STEP

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

Последната стойност на променливата броячще бъде равно на 1.

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

VBA за всеки ... Следващ цикъл

Цикълът For Every ... Next има следния цикъл:

Тук променлива групов елементпринадлежи на елемент_група(желязна логика!!!). Имам предвид, че обектът елемент_групатрябва да бъде колекция от обекти. Няма да можете да стартирате цикъл For Every на един обект (Microsoft незабавно ще ви уведоми за това с грешка 438).

Този цикъл итерира всички елементи на колекция, като се започне от първия. Можете да използвате този цикъл, ако трябва например да преминете през всички листове в работна книга, обекти на лист, централни таблици и т.н.

Ето пример за това как можете да използвате цикъл For Every, за да преминете през всички листове в работна книга:

... или всички централни таблици на листа

Прекъсване на VBA цикъл

Ако трябва да излезете от цикъла, преди да бъде достигнат краят на цикъла, използвайте командата КрайЗавъв връзка с инструкциите АКО. В примера по-долу ще излезем от цикъла, докато се достигне условието за прекратяване; в този цикъл излизането ще се извърши при условие, че променливата броячще е равно на 3.

Пропускане на част от цикъл в For Every

Лоша практика е да пропуснете част от цикъла и след това да се върнете назад. Нека обаче да разгледаме един пример:

Тук пропуснахме една итерация (когато j = 3). Какъв резултат според вас ще даде програмата? 3? 5? Е... всъщност нито една от опциите не е правилна. Цикълът ще работи за неопределено време, докато паметта на компютъра се запълни.

Възможно е обаче да пропуснете стъпка в цикъла без последствия. Можете да увеличите стойността на брояча с 1 (или друга стойност), което ще пропусне операциите между тези стойности. Ето един пример:

Но отново, това е лоша практика на кодиране и може да доведе до нежелани последствия при кодиране в бъдеще. Вместо това, ако трябва да пропуснете някои итерации, опитайте да използвате функцията If или Select Case.

Excel VBA. Цикъл в макрос

Нека създадем най-простия цикъл с помощта на VBA в Excel.

Този път ще напишем всичко със собствените си ръце:

Подпълване () "Започваме цикъла от 1 до 10" Началото на цикъла За i = 1 до 10 "В първата колона пишем серийния номер клетки (i + 1, 1) = i" Във втората колона ние пишем продукта сериен номери стойността, посочена в клетка "B1" Клетки (i + 1, 2) = i * Диапазон ("b1"). Стойност "(! LANG: Край на цикъла Следващ Край Под

Ще декодирам горния VBA код:

  • Целият код на макроса е затворен между Sub и End Sub, след Sub се изписва името на макроса.
  • Текстът след „означава коментар
  • Цикълът е между For ... to и Next
  • i - в моя случай променлива, можете да изберете всяка друга, включително руска нотация (например: За променлива = 1 до 10 ...)
  • Клетки (ред, колона) - клетка, в която искаме да запишем нещо или от която искаме да извлечем информация, в нашия случай посочихме колоната като константа (1 и 2) и направихме реда променлива (i + 1).
  • Диапазон („b1“) връща стойността на клетка „B1“

Освен това можете веднага да добавите минимак, за да изчистите диапазона от стойности

Sub Clear () Диапазон ("A2:B11").ClearContents End Sub !}

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

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

В тази статия ще анализираме синтаксиса и примерите за следното цикли във VBA:

  • За всеки
  • Докато
  • До

За цикъл във VBA

Цикъл завъв VBA, обикновено се използва при зацикляне на част от кода, ако знаем крайната стойност на counter - брояча, при който ще излезем от цикъла.
Да вземем за пример най-често срещания пример:

Генерирайте масив от 5 цели числа

Dim mas (5) Като цяло число За ​​i% = 0 До 4 mas (i) = Int ((10 * Rnd) + 1) Следващо i

Обърнете внимание, че този пример използва неявна декларация, когато работите с цикли във VBA. i%- означава имплицитна декларация на променлива ив целочислен формат. Тази конструкция по същество замества следното: dim i като цяло число. Това се използва, за да бъде кодът ви кратък и за лесно писане и четене. В по-старите версии на VBA трябва да предоставите знак за формат след всяко използване на имплицитната променлива. В по-късните версии само един е достатъчен.

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

Намерете пресечната точка на графиката Y = 5 * x + 5 с оста Y

Функция expr (x As Integer) Като цяло число expr = 5 * x + 5 End Функция Под CodeTown () Dim i като цяло число За ​​i = -10 до 10 Стъпка 1 Ако expr (i) = 0 Тогава MsgBox "За Y = 0, X =" + CStr (i) Следващо i Край под

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

Функция expr (x As Integer) As Integer expr = 5 * x + 5 End Function Sub CodeTown () Dim i Като цяло число За ​​i = -10 до 10 Стъпка 1 Ако expr (i) = 0 Тогава MsgBox "За Y = 0, X = "+ CStr (i) Изход за край, ако следващ i край под

Използване на командата Излезтеможете да прекратите всеки цикъл във VBA. Достатъчно е да посочите след Излезтеимето на използвания цикъл. Също така е възможно те да прекратят всяка процедура или функция.

За всеки цикъл във VBA


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

Покажете заглавията на всички листове в работна книга

За всяка ws В тази работна книга. Работни листове MsgBox ws. Име Следваща ws

И още един интересен пример:

Променете размера на шрифта и центрирайте текста в етикета

За всеки елемент в UserForm1.Controls Ако InStr (1, UserForm1.Controls.Item (i%). Name, "Label")> 0 Тогава UserForm1.Controls.Item (i%). TextAlign = fmTextAlignCenter UserForm1.Controls.Item ( i%). Font.Size = 20 i% = i% + 1 End If Следващ елемент

Тук трябва да се разбере, че чрез Контролиможете да се обърнете към всеки елемент от формуляра. Ако филтрирате по име, например, както направихме по-горе, тогава можете да изберете групи от елементи и да промените техните свойства. V в такъв случай, размер на шрифта и подравняване.

Докато цикъл във VBA


Цикли във VBA, които използват структура Do..Loop(това е докатои доцикли) могат да бъдат записани с различни места на фрагмента на условието. Както можете да видите на снимката по-горе, условието може да бъде проверено след извършване на една итерация или може би преди стартиране на цикъла.
Най-популярният пример:

Сортирайте във възходящ ред генерирания масив с метода на балончетата

Dim mas (5) Като цяло число За ​​i% = 0 До 4 mas (i%) = Int ((10 * Rnd) + 1) Следващо i Dim count Като цяло число, temp Като цяло число = 1 Do While count> 0 count = 0 За i% = 0 до 3 Ако mas (i)> mas (i + 1) Тогава temp = mas (i) mas (i) = mas (i + 1) mas (i + 1) = temp count = count + 1 Край, ако следващ i% цикъл

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

До Цикъл във VBA


Както можете да видите, разликите от докатоизключително незначителен. Цикъл Довъв VBA може да се реализира с помощта на конструкцията докато НЕ (условие)... Ето обаче един пример:

Принуди потребителя да въведе номер

Dim temp As Variant Do temp = InputBox („Въведете число“) Цикъл до IsNumeric (temp)

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

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

За ... Следващ цикъл VBA Excel, неговия синтаксис и описание на отделните компоненти. Примери за използване на цикъла For ... Next.

Цикълът For… Next във VBA Excel е предназначен да изпълни група оператори необходимия брой пъти, посочен от контролната променлива на цикъла, брояча. Докато цикълът работи, броячът се увеличава или намалява след всяка итерация с числото, определено от оператора Step, или по подразбиране с единица. Когато трябва да приложите цикъл към елементи, чийто брой и индексиране в група (диапазон, масив, колекция) са неизвестни, трябва да използвате цикъла For Every… Next.

  1. За ... Синтаксис на следващия цикъл
  2. За ... Компоненти на следващия цикъл
  3. Примери за ... Следващи цикли
    • Най-простият цикъл
    • Най-простият цикъл със стъпка
    • Цикъл с отрицателни аргументи
    • Вложен цикъл
    • Излизане от цикъла
    • Цикъл с дробни аргументи

За ... Синтаксис на следващия цикъл

За брояч = начало До край Следващ За брояч = начало До край Следващ

V квадратни скобиса посочени незадължителните атрибути на цикъла For ... Next.

За ... Компоненти на следващия цикъл

Съставна част Описание
брояч Задължителен атрибут. Числова променлива, която действа като брояч, която също се нарича контролна променлива на цикъл.
започнете Задължителен атрибут. Числово изразяванекойто определя първоначалната стойност на брояча.
край Задължителен атрибут. Числов израз, който определя крайната стойност на брояча.
стъпка * Незадължителен атрибут. Оператор, указващ, че стъпката на цикъла ще бъде посочена.
стъпка Незадължителен атрибут. Числов израз, който определя стъпката на цикъла. Тя може да бъде положителна или отрицателна.
изявления Незадължителен атрибут **. Оператори на вашия код.
Изход за Незадължителен атрибут. Инструкцията за излизане от цикъла, докато той приключи.
Следващия Тук брояч- незадължителен атрибут. Това е същото име за контролната променлива на цикъла и може да бъде пропуснато тук.

* Ако атрибут Стъпкане присъства, цикълът For… Next се изпълнява със стъпка по подразбиране от.

** Ако не използвате своя код в цикъла, смисълът на използването на цикъла се губи.

Примери за ... Следващи цикли

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

Най-простият цикъл

Запълваме първите десет клетки от първата колона на активния лист с числа от 1 до 10:

Подтест1 () Dim i Колкото дълго за i = 1 до 10 клетки (i, 1) = i Следващ край под

Най-простият цикъл със стъпка

Операторът Step със стойност 3 беше добавен към предишния цикъл и резултатите се записват във втората колона:

Подтест 2 () Dim i толкова дълго за i = 1 до 10 Стъпка 3 клетки (i, 2) = i Следващ край под

Цикъл с отрицателни аргументи

Този цикъл запълва първите десет клетки от третата колона в обратен ред:

Sub test3 () Dim i As Long For i = 0 до -9 Стъпка -1 клетки (i + 10, 3) = i + 10 Next End Sub

Увеличете размера на стъпката до -3 и запишете резултатите в четвъртата колона на активния лист:

Sub test4 () Dim i As Long For i = 0 до -9 Стъпка -3 клетки (i + 10, 4) = i + 10 Next End Sub

Вложен цикъл

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

Подтест5 () Dim i1 As Long, i2 As Long For i1 = 1 до 10 "На петата клетка в ред i1 е присвоено 0 клетки (i1, 5) = 0 За i2 = 1 до 4 клетки (i1, 5) = клетки (i1 , 5) + Клетки (i1, i2) Следваща Следваща Крайна Под

Излизане от цикъла

В шестата колона на активния лист записваме имената на десет животни, разбира се, използвайки цикъла For ... Next:

Подтест 6 () Dim i Колкото дълго за i = 1 до 10 клетки (i, 6) = Изберете (i, "Мечка", "Слон", "Жираф", "Антилопа", _ "Крокодил", "Зебра", "Тигър", "Гущер", "Лъв", "Хипопотам") Следващ край под

Следващият цикъл ще търси в шестата колона на крокодила, който е изял галошите. В клетката на седмата колона цикълът, докато срещне крокодила, ще изпише реда „Тук имаше цикъл“, а когато намери крокодила, ще напише „Той яде галоши“ и ще спре да работи, като изпълни Изход За команда. Това ще се види в клетките до имената на животните под крокодила, които няма да съдържат текст „Имаше цикъл“.

Подтест 7 () Dim i As Long For i = 1 до 10 Ако клетки (i, 6) = "Крокодил" Тогава клетки (i, 7) = "Той яде галоши" Изход За другоКлетки (i, 7) = "Имаше цикъл" Край, ако следващ край Под

Резултатът от цикъла For ... Next от примерите:

Резултатът от циклите For ... Next

Ще получите такива данни в активния лист на Excel, ако последователно стартирате за изпълнение във VBA редактора всички седем процедури от примерите, които демонстрират работата на цикъла For ... Next.

Цикъл с дробни аргументи

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

За i = 1 до 20 Стъпка 2 За i = a До b Стъпка c За i = a - 3 До 2b + 1 Стъпка c / 2

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

„Стойности на атрибути преди закръгляване За i = 1,5 до 10,5 Стъпка 2,51“ Стойностите на атрибути са закръглени за i = 2 до 10 Стъпка 3

Опитайте се да не позволявате на незакръглени стойности на аргументи да влизат в тялото на цикъла For ... Next, за да не получите непредвидими резултати от неговото изпълнение. Ако без дробни числане се заобикаля, но трябва да се използва нормално закръгляне, използвайте WorksheetFunction.Round, за да закръглите числото, преди да го използвате в цикъл For ... Next.

VBA към Excel

Програмиране на Excel с използвайки VBA.

VBA ви позволява да пишете макроси в Excel. Как да направите това е обсъдено по-долу.

Приложение

Приложението е обектът в горната част на йерархията на обектите в Excel. Приложението е Excel. Ето примери за използване на приложението:

прозорец с нормален размер

Application.WindowState = xlNormal

максимален прозорец

Application.WindowState = xlMaximized

Работни тетрадки

Работните книги са колекция от работни книги, които са отворени. Всеки работна книгапредставено от обекта Workbook. Можете да разберете колко работни книги в момента има в колекцията по следния начин:

Dim bookCount As Integer
bookCount = Работни книги.Брой
MsgBox ("Отворени книги =" & bookCount)

Можете да посетите необходимата работна книга в колекцията Workbooks по нейния номер или по нейното име:

Работни тетрадки. Елемент (2) .Активиране

тук сме активирали втория елемент от колекцията Workbooks.

По-долу ще видим други примери.

Работна тетрадка

Работни тетрадки.Позиция (1) .Запазване

И къде е работната книга в този пример? Тук: Workbooks.Item (1), този израз връща първия елемент в колекцията Workbooks, който е Workbook.

Затваряне на работната книга:

Работни тетрадки.Позиция (1) .Затваряне

Листи

Листовете са всички листове от работна книга. Има два типа листове с работни книги: работните листове са обикновени листове на Excel, а вторият тип са листове с диаграми. И двамата съставляват колекцията Sheets.

Графики

Графиките са просто диаграми в работната книга.

диаграма

Диаграмата е обект, представляващ една диаграма. Ако диаграмата се съдържа в нормален работен лист, тогава тя не е обект на диаграма.

Работни листове

Работните листове са просто работни листове за работни книги.

Добавете работен лист към колекцията Worksheets:

Работен лист

Работният лист е един лист от работна книга на Excel.

Всички клетки на работния лист:

Работни листове ("Sheet1"). Клетки

Обхват. Работа с клетки в Excel

Диапазонът е една клетка от работен лист или няколко клетки. Нека разгледаме този обект по-подробно. Инсталирайте бутона на работен лист на Excel. Отворете лентата с инструменти за контроли ( Кликнете с десния бутонв свободното поле на лентата с инструменти и изберете от падащото меню). В този панел изберете бутона и го задайте на свободно мястоработен лист от дясната му страна. Щракнете с десния бутон върху нашия бутон -> Свойства. Задайте свойството Name на CommandButton и свойството Caption на Range Test.

Получаваме:

Затворете прозореца със свойства на бутона и щракнете върху нашия бутон с десния бутон на мишката, изберете "Изходен текст" от падащото меню. Отваря се прозорецът на редактора на VBA, извиква се Microsoft VisualОсновен. Вече има шаблон за манипулатора за натискане на CommandButton:

Между другото, разгледайте този шаблон, ключовата дума Sub казва, че това е процедура, а думата Private показва, че тази процедура се вижда само в този модул.

Всички сме готови да започнем да се учим как да работим с клетки в работен лист на Excel.

Как да настроите активната клетка?

Нека направим клетка A2: A2 активна:

Частен подкоманден бутон_клик ()
Обхват ("A2: A2"). Активирайте
Край под

6.1. Обекти, методи, свойства

Visual Basic ви позволява да създавате софтуерни продукти, способни да автоматизират в достатъчна степен решаването на специфични потребителски проблеми.

VBA е обектно-ориентирана среда, съдържаща голяма колекция от обекти, всеки с много свойства и методи. Обектите и инструментите принадлежат към конкретен клас (например класът TextBox).

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

Обекти (аналогично на съществително)

Обектът е всеки елемент от приложението ─ клетка, лист, работна книга, диаграма. Всъщност обектът е самото приложение на Excel. Обектите могат да включват региони на клетки, граници на клетки, прозорци, скриптове, стилове и т.н. Всеки клас обекти има свой собствен набор от свойства, функции и събития.

Методи (аналогично на глагол)

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

Синтаксис на извикване: Object.Method - посочете името на обекта, извикващ метода и името на самия метод, разделени с точка.

Пример: Ball.Kick или Ball.Kick; Вода. Напитка

Комбинацията от двоеточие и знак за равенство в кода винаги показва параметър на метода, т.е. как се извършва действието.

Методите могат да имат много параметри, задължителни или не.

Пример 1: Защита на Sheet1 от промяна (метод на защита)

Листове („Лист1”). Защита

Пример 2: добавяне на нов работен лист

Работен лист.Добавяне преди: = Работни листове (1)

Свойство (аналогично на прилагателно)

Свойството е атрибут на обект, който описва как изглежда обектът (цвят, размер и местоположение) и как действа (дали е видим, дали се отнася до друг обект). Когато се създаде обект, се изпълнява процедурата за създаване на екземпляр на този обект.

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

Синтаксис на повикване: Object.Property

Свойство винаги присъства от лявата или дясната страна на изразите за присвояване на стойност. Пред знака за равенство няма двоеточие.

Пример 1: преименуване на Sheet1 на Accounts:

Листове („Sheet1“). Име = „Акаунти“

Събитие – взаимодействие на потребителя с конкретен обект в работния лист. Всеки клас обекти има своя собствена група от събития, на които обектите от този клас реагират.

Аргументи

Аргументите се използват за предаване на стойности към методи, които са им необходими за решаване на задачите, за които са програмирани. Задачата се изпълнява правилно само ако всеки елемент има посочения тип този метод... Числа, текст и логически стойности (вярно и невярно) могат да се предават като аргументи.

Има два начина за предаване на аргументи към метод:

─ вътрешни, в които аргументите трябва да бъдат посочени в определен ред;

Пример: ActiveCell.BorderAround LineStyle. Тегло. ColorIndex. Цвят

Действието на метода BorderAround на обекта Range задава нови атрибути за границата около посочената област. Когато го използвате, трябва да предоставите аргументи, за да определите стила, дебелината и цвета на линията. Освен това свойството ColorIndex ви позволява да определите цвета с помощта на число, а свойството Color с помощта на константата на VisualBasic.

─ външен, при който последователността на аргументите е произволна.

Пример: Диапазон (“A1: C7”). Граница около цветен индекс: = 3, Тегло: = xlДебел

Тип аргументи:

- задължителни аргументи (за редактиране на ET параметри)

- незадължителни аргументи (За редактиране на обекти (промяна на цвят, размер, рамка))

6.2. Структурата, използвана във VBA

Приложението е на най-високото ниво в йерархията, следвано от проекти, свързани с действителните документи на това приложение. Третото ниво съдържа модули (приложни модули, потребителски модули, модули за класове, модули за формуляри и модули за връзки), а последното съдържа техните процедури и функции.

Йерархията, използвана във VBA, е показана на фиг. 6.1.

Ориз. 6.1. Йерархия, използвана във VBA

модул- това е част от програмата, проектирана по такъв начин, че позволява независимото й излъчване. Модулът се състои от два раздела: раздел Декларация и раздел процедури и функции. Първият раздел описва глобални променливи, потребителски дефинирани типове и изброени типове; вторият, процедури и функции.

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

Синтаксис на дефиниция на процедурата:

Име на подпроцедура (arg_1, arg_2, _, arg_n)

VBA изявление

VBA изявление

VBA изявление

Private - задава обхвата на процедурата - модула, в който е описана. Може да бъде извикан само от процедури на същия модул.

Public - процедурата става достъпна за всички модули (инсталирани по подразбиране)

Приятел - процедурата се вижда само в проекта, в който е описан класът, на който е член.

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

На фиг. 6.2 представя интерфейса на VBA.

Ориз. 6.2. VBA интерфейс

6.3. Типове данни, използвани във VBA

6.3.1. Променливи

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

За да използвате променлива, тя трябва да бъде декларирана (декларирана).

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

Затъмнена променлива

Dim е ключова дума, показваща, че се декларира променлива (dimension - size);

Променлива - името на декларираната променлива;

As - ключова дума, използвана при определяне на типа данни (както - как);

Тип - типът данни за декларираната променлива

Един израз на Dim може да опише няколко променливи, като ги изброи, разделени със запетаи.

Dim i като байт, j като цяло число, k като цяло число

Таблица 6.1. представя основните типове данни, използвани за дефиниране на променливи.

Таблица 6.1. Типове данни

Тип данни

Променливи стойности

булев (булев)

булеви променливи, които приемат една от двете стойности: True или False

Байт (кратко цяло число без знак)

цяло число от диапазона от 0 до 255

цяло число

цели числа от -32 768 до 32 767

Дълго (дълго цяло число)

цели числа от -2 147 483 648 до 2 147 483 647

Валута

променливи за парични изчисления с фиксиран брой цифри след десетичната запетая; избягвайте натрупването на грешки при закръгляването

Дата

променливи за съхранение на дата и час

Единична (единична прецизна плаваща запетая)

числа с дробна част от -3,40282310 38 до -1,40129810 -45

за отрицателни числаи от 1,40129810 -45 до 3,40282310 38 за положителни числа

Двойна (с плаваща запетая с двойна точност)

числа с дробна част от -1,7976931348623110 308 до -4,9406564584124710 -324

за отрицателни числа и от 4,9406564584124710 -324 до 1,7976931348623110308 за положителни числа

Низ (низ променлива дължина)

променливи за съхранение на символни низове от 0 до 64 KB

Вариант (универсален)

Автоматично коригиране на данните

обект (обект)

променливи за съхранение на препратки към обекти

Ако типът не е посочен в описанието на променливите, на тях автоматично се присвоява Вариант. Това означава, че клетката, съответстваща на тази променлива, може да съхранява информация от всякакъв вид (аналогично на формата "Общ" в ET).

Пример: Dim i, j като цяло число

Това е еквивалентно на следващо вписване: Dim i като вариант, j като цяло число

За да запишете същия формат, трябва:

Dim i като цяло число, j като цяло число

За използване на определени променливи в различни части на програмата се използва така нареченият обхват.

Обхватите на променливите са програмни области, в които името на променлива се счита за валидно (видимо) и следователно е възможен достъп до нейната стойност (Фигура 6.3).

Ориз. 6.3. VBA променливи обхвати

Има три нива на променлива видимост и пет начинанейните реклами.

Ниво 1 - Процедура (обхватът е процедурата, в която е декларирана променливата).

*** Инструкцията Dim декларира променлива навсякъде в процедурата, но винаги предхожда изразите, които я използват. Такава променлива може да съществува само по време на изпълнение на процедурата, след края на която стойността на тази променлива се губи и паметта се освобождава.

*** Статично (подобно на Dim) - но! декларира статична променлива. След излизане от процедурата паметта не се освобождава и стойността не се губи.

ниво 2 - Модул

*** Частният оператор декларира променлива в секцията Декларация (извън процедурите на модула)

*** операторът Dim (в този случай) е напълно подобен на частния оператор

ниво 3 - Приложение

*** Публичното изявление декларира променлива в секцията Декларация

6.3.2. Константи

Те са разделени на потребителски и вградени.

Персонализирани константиизискват съобщения. За това се използва оператор на формуляра:

Постоянна константа = стойност

Const е ключова дума, която показва, че константа се декларира;

As - ключовата дума, с която да започне уточняването на типа данни;

Константа - името на декларираната константа;

Тип - типът на данните за константата;

Стойността е стойността, присвоена на константата.

Const pi As Double = 3,141592654

Const e As Double = 2,718281828

Const съобщение = "Изключване"

Можете да декларирате няколко константи, разделени със запетаи:

Const min = 0, max = 1000

Вградени константине изискват обявление. Имената на вградените константи започват с префикса vb, например vbFriday.

6.4. Използване на стандартни прозорци на операционната система Windows

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

Функциите MsgBox и InputBox се използват за въвеждане и извеждане на информация в програмния код от потребителя, както и за създаване на персонализирани диалогови прозорци.

6.4.1. Функция MsgBox

MsgBox („съобщение“, [бутони, заглавие]) - тази функция показва диалогов прозорец, съдържащ съобщение с дължина до 1024 знака, в което стойността на променливите може да бъде включена чрез операцията за конкатенация, както и (по избор) бутони за реагиране на показване на прозорци (само с бутона OK по подразбиране).

Когато се дефинира сложен диалогов прозорец с помощта на функцията MsgBox, се използват следните константи:

1) За да зададете вида на прозореца за съобщение (фиг. 6.4):

vbCritical, vbQuestion, vbExclamation, vbInformation.

Ориз. 6.4. Външен вид на прозореца

2) За да зададете бутоните в полето за съобщения:

vbOkCancel, vbAbortRetryIgnore, vbYesNOCancel, vbYesNO, vbRetryCancel.

3) За възлагане по-нататъшни действияслед натискане на съответния бутон:

vbOk, vbCancel, vbAbort, vbRetry, vbIgnore, vbYes, vbNO.

Примерна процедура 1:

Частен подпример_1 ()

y = MsgBox ("Затваряне на прозореца", vbQuestion + vbYesNoCancel, "Windows Message")

Кодът на процедура 1 във VBA и резултатът от изпълнението на програмата са показани на фиг. 6.5.

Ориз. 6.5. Примерна процедура 1

Примерна процедура 2:

Под Здравейте ()

y = MsgBox ("Затваряне на прозореца", vbQuestion + vbYesNoCancel, "Windows Message")

Ако y = vbYes Тогава MsgBox ("VVVVVVVVVVVVVVVVVVVVV") Друго

Ако y = vbNo Тогава ActiveCell = "Здравей"

Кодът на процедура 2 във VBA и резултатът от изпълнението на програмата са показани на фиг. 6.6.

Ориз. 6.6. Примерна процедура 2

6.4.2. Функция InputBox

InputBox („съобщение“ [, заглавие] [, стойност по подразбиране] [, x-координата] [, y-координата]) е функция, използвана за въвеждане на стойности на променливи в програмата. Тази функция показва диалогов прозорец, съдържащ поле за въвеждане, бутони OK и Cancel, съобщение (подкана за въвеждане) и (по избор) заглавието на прозореца, стойност по подразбиране и хоризонталните и вертикалните координати на прозореца.

Така че въвеждането на число може да се зададе с командата:

a = InputBox („първо число“)

Ориз. 6.7. Изглед на функцията InputBox

6.4.3. Използване на функциите MsgBox и InputBox заедно

На практика функциите MsgBox и InputBox се използват заедно за създаване на процедури. Освен това, в допълнение към тях, може да се използва условен израз If, който ви позволява да проверите въведените от потребителя условия и да върнете резултат въз основа на неговите констатации.

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

1) ако (ако)

2) тогава

3) иначе (в противен случай)

Така че изразът - ако a> 1 тогава b = a + 1, в противен случай b = a-1 ще има формата

Ако a> 1, тогава b = a + 1, иначе b = a-1.

Примерна процедура 3:

Компютърът трябва да умножи две числа и да изведе резултата в една от клетките на таблицата. Ако техният продукт е повече от 2000, тогава компютърът трябва да покаже допълнително съобщение „Получената стойност е по-голяма от 2000“.

Подпример_2 ()

Dim a, b, y Колкото дълго

a = InputBox („първо число“)

b = InputBox („второ число“)

Ако y< 2000 Then Range("A4") = y Else MsgBox ("Полученное значение больше 2000")

Кодът на процедура 3 във VBA и резултатът от изпълнението на програмата с различни условия е показан на фиг. 6.8.



Ориз. 6.8. Примерна процедура 3

Помислете за програма, която включва сложна функцияИзявление MsgBox и If.

Примерна процедура 4:

Въвеждат се две произволни числа. След това се задава въпросът "Сигурни ли сте, че искате да ги умножите?" и опции за отговор: „да“, „не“. Ако отговорът е „да“, тогава числата се умножават и се показва съобщение с резултата, в противен случай действието не се извършва.

Подпример ()

Dim a, b, d като двойно

a = InputBox („първо число“)

b = InputBox („второ число“)

y = MsgBox ("Сигурни ли сте, че искате да ги умножите?", vbCritical + vbYesNo, "Въпрос")

Ако y = vbYes Тогава d = a * b Иначе MsgBox („Действието е отменено“)

Ако y = vbYes Тогава MsgBox (d)

Кодът на процедура 3 във VBA и резултатът от изпълнението на програмата с различни условия е показан на фиг. 6.9.



Ориз. 6.9. Примерна процедура 4

6.5. VBA контролни конструкции

Структурите за управление на езика за програмиране са инструкции и групи инструкции, чието използване ви позволява да променяте, ако е необходимо, последователността на изпълнение на други инструкции в програмата. Тези конструкции са подразделени на клонове и бримки. Разклоняването е контролна структура, която ви позволява да пропуснете определени групи инструкции при изпълнение, в зависимост от стойността на условието. Цикълът е контролна конструкция, която ви позволява многократно да изпълнявате групи инструкции, преди да настъпи събитие.

6.5.1. Разклоняване

Ако ... Тогава Конструирайте

Инструкцията If... Then инструктира VBA да вземе най-простите решения: ако условието след оператора If е вярно, тогава трябва да се изпълни следният оператор (или оператори); ако условието е фалшиво, трябва да отидете на реда веднага след условната конструкция. Едноредова конструкция:

Ако условие Тогава изявление [s]

При използване на множество изрази (If блок):

Ако условие Тогава

оператор

[оператори]

Пример за едноредово:

А ge = InputBox („моля, въведете вашата възраст.“, „Възраст“)

Ако Възраст< 21 Then MsgBox "Вы не можете покупать алкогольные напитки.", "несовершеннолетний"

Ориз. 6.10 Пример за конструкция If then

Ако... Тогава... Друго

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

Синтаксис на конструкцията:

Ако условие Тогава

оператори_1

оператори_2

Ако условието е вярно, VBA изпълнява първата група оператори, statement_1, ако е невярно, се премества на реда Else и след това се изпълнява втората група оператори, statement_2.

С уб възраст ()

Възраст = InputBox („моля, въведете възрастта си.“, „Възраст“)

Ако Възраст< 21 Then

MsgBox "Не можете да купувате алкохолни напитки.", "Непълнолетни"

Vkus = InputBox ("какво искате да купите?", "Вкус")

Ориз. 6.11. Пример за конструкция If Then Else

Ако ... Тогава ... Друго Ако ... Друго

С тази конструкция можете да изберете един от няколкото начина на действие. Можете да използвате произволен брой редове с ElseIf, в зависимост от сложността на програмата.

Синтаксис на конструкцията:

Ако условие_1 Тогава

оператори_1

ElseIf условие_2 Тогава

оператори_2

ElseIf условие_3 Тогава

оператори_3

оператори_4

Препоръчително е тази конструкция да се използва с броя на операторите ElseIf не повече от 5. В този случай е по-добре да използвате конструкцията Select Case.

Изберете Дизайн на кутията

Вместо множество оператори ElseIf, можете да използвате конструкцията Select Case за по-сбита програма.

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

Изразът, който трябва да се повтори, се сравнява с изразите след Case. Ако съвпадат, тогава се изпълнява съответният оператор, в противен случай се проверяват други изрази. Ако нито един от изразите не съвпада, се изпълняват операторите след Case Else.

Синтаксис на конструкцията:

Изберете Регистр, повтарящ се_израз

Дело израз_1

оператори_1

Дело израз_2

оператори_2

оператори

6.5.2. Цикли

Има три типа цикли: условни, броячи и цикли за структура на данни.

В условните цикли оператор или група от изрази се повтарят, докато условието не бъде изпълнено. Такива цикли се наричат ​​Do loops.

Ако броят на повторенията на тялото на цикъла е известен предварително, няма нужда да проверявате контролното условие. Такива цикли се наричат ​​итеративни цикли за изброяване. Циклите от този тип са разделени на две групи: обратни цикли и цикли за структура на данни.

В цикли с брояч се използва специална променлива - брояч, чиято стойност с всяко повторение на тялото на цикъла се увеличава или намалява с определено количество - стъпка на цикъла... Цикълът завършва, когато броячът достигне (или надвиши) крайната стойност на брояча на цикъла.

Синтаксис:

За брояч = начална_стойност До крайна_стойност Стъпка цикл_стъпка

<тело цикла>

Следващ брояч

Пример за изчисляване на сумата от стойностите, съдържащи се в нечетните клетки на първата колона на първия лист (в рамките на първите 10 клетки):

Dim I като цяло число

С = 0

За I = 1 до 10 Стъпка 2

S = S + Приложение. Работни листове (1) .Клетки (I, 1) .Стойност

Ориз. 6.12. Пример за цикъл 1

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

Синтаксис:

За всеки елемент в структура_данни

<тело цикла>

Следващ елемент

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

д im S като работен лист

За всеки S In Application.Worksheets

Ориз. 6.13. Пример за цикъл 2

6.6. Използване на контроли за стартиране на макрос и въвеждане на данни

За да използвате контролите в работния лист, трябва да напишете код във VBA за всяка от контролите. За да направите това, първо трябва да отидете в режим на проектиране. Също така в този режим свойствата на обекта се променят в прозореца Properties.

За запис програмен кодконтролният елемент трябва да бъде щракнат двукратно върху този елемент (фиг. 6.14 а) и той автоматично ще премине в режим VBA и ще образува "операторни скоби", като вземе предвид събитието на потребителската форма (фиг. 6.14 b).

Ориз. 6.14. Формиране на операторни скоби върху контрола

Събития на персонализиран формуляр

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

Ориз. 6.15 Събития на персонализиран формуляр

Някои видове събития:

    Събития с мишката- еднократно (двойно) щракване с ляв бутон върху обект; натискане (освобождаване) на бутона на мишката; преместване на курсора на мишката върху контрола.

    Събития на клавиатурата- натискане на обикновен символ, функционални клавиши или някаква комбинация от символи на клавиатурата.

    Формирайте събития- зареждане (Load), разтоварване (Unload) на формуляра и др.

Събитието Click възниква, когато потребителят натисне и освободи бутона на мишката, докато показалецът на мишката е над обект. Събитието може да възникне, когато стойността на контролата се промени.

Формат на процедурата за обработка на събития

Частен подформуляр_Щракнете ()

Частен подобект_Щракване ()

където object е името на обекта, към който принадлежи този манипулатор.

пример:

Частен подформуляр_Щракнете ()

MsgBox „Щракнете“

Ориз. 6.17. Пример за създаване на бутон

Писане на програмен код за EI

Програмирането на контрол следва същите принципи като програмирането на макрос.

Програмиране на бутони:

Пример 1: Пишете Здравейте след натискане на бутона:

Частен суб Клик_бутон ()

MsgBox "Здравей :)"

Ориз. 6.18. Пример 1 за създаване на контрола

Пример 2:Проверка на условието: Преизчисляване на таблицата

Ориз. 6.19. Таблица на източника

Създайте бутон (фиг. 6.20)

Ориз. 6.20. Създаване на бутон за изпълнение на пример 2

Двойното щракване ви отвежда до прозореца за създаване на процедура (фиг. 6.21):

Ориз. 6.21. Прозорец за създаване на процедура

Създаваме кода:

Private Sub sum_Click ()

Dim I като цяло число

За I = 2 до 8 Стъпка 1

N = клетки (I, 2) * клетки (I, 3)

S = S + клетки (I, 4). Стойност

Клетки (I + 2, 4) = S

Където клетки (I, 4) е номерът на клетката, където I е редът, 4 е колоната (D).

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




Ориз. 6.22. Реализация на разглеждания пример

6.7. Персонализирани формуляри, създадени във VBA

Персонализираните формуляри са необходими за създаване на по-ефективно потребителско изживяване.

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

Формите са обекти, които могат да бъдат извиквани от други модули в приложението.

Можете да добавяте персонализирани методи и свойства към формуляри. За да създадете нов метод във формуляра, трябва да добавите процедура, декларирана с думата Public:

Public Sub UserMethod ()

оператори

Стилове на интерфейса:

1) единичен документ (SDI) - можете да отворите само един документ, докато трябва да затворите активния документ, за да отворите друг;

2) мулти-документ (MDI) - поддържа множество формуляри вътре в основния формуляр на контейнера; има елементи в менюто Window за превключване между прозорци или документи;

3) стил на изследовател – прозорец, който има два панела или области, обикновено състоящи се от йерархично представяне на нивата на информация отляво и област за показване отдясно.

Етапи на създаване на формуляр:

1. На формуляра се поставят необходими елементиуправление и добре разположен.

Резултат: имаме формуляр с контроли, но етикетите на тях са стандартни: Command1, Label1 и т.н.

2. Свойствата на формуляра и контролите са зададени

Резултат: формата има желан изглед, на всички ЕИ има ясни надписи, необходимите картинки и т.н. Не може да се стартира поради липса на програмния код.

3. Писани са манипулатори на събития от контроли.

Резултат: изпълнение на действия в съответствие със заданието.

д
За да вмъкнете персонализиран формуляр, трябва да Вмъкнете - UserForm.

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

Ориз. 6.23. Интерфейс за създаване на формуляр

Пример 1: Създайте формуляр за изчисляване на функция
съдържащи:

    място за извеждане (от програмата) на резултата от изчислението;

    текстово поле за въвеждане на изходни данни;

    бутон, за да стартирате програмата и да отмените.

След уточняване на типа формуляр (фиг. 6.24), трябва да се посочи програмният код.

Ориз. 6.24. Създаване на формуляр за пример 1

Щракването двукратно върху бутона "Изчисли" ще превключи формуляра към редактиране на код.

П rivate Sub Calc_Click ()

1: a = TextBox_a.Value

2: b = TextBox_b.Стойност

3: c = Sqr (a ^ 2 + b ^ 2)

4: Label1.Caption = "c =" & Str (c)

Частен суб Отказ_Щракване ()

Ориз. 6.25. Илюстрация на това как работи формата от пример 1

Персонализиран формуляр може да бъде изведен от всеки модул. Методът Show се използва за показването му. Име. Покажи

Частен суб VSch_Click ()

Ориз. 6.26. Използване на метода Show

Пример 2. Създаване на форма за въвеждане от потребител на променливи и контролни превключватели със сумиране и изваждане с показване на резултата.


Ориз. 6.27. Създаване на формуляр и неговия код във VBA например 2

Частна подкомандаButton1_Щракнете ()

Dim първо толкова дълго, второ толкова дълго

първо = tb1.Стойност

секунда = tb2.Стойност

„Ако е избран първият бутон, добавете променливите

Ако ob1.Value = Вярно Тогава

lab4.Caption = първа + втора

„Ако е избран вторият бутон, извадете променливите

Ако ob2.Value = Вярно Тогава

lab4.Caption = първи - втори


Ориз. 6.28. Илюстрация на това как работи формата от пример 2

Пример 3. Създаване на формуляр за въвеждане и извеждане на потребителски редове в таблицата



Ориз. 6.29. Създаване на формуляр за пример 3

Частен суб CB_Cancel_Click ()

Частен суб CB_ok_Click ()

Dim LastRow As Long

LastRow = Работни листове ("Sheet3"). Диапазон ("A65536"). Край (xlUp) .Row + 1

Клетки (последен ред, 1) .Стойност = tb1.Стойност

Клетки (последен ред, 2) .Стойност = tb2.Стойност

Клетки (последен ред, 3) .Стойност = tb3.Стойност


Ориз. 6.30. Илюстрация на това как работи формата от пример 3

Въпроси за самоконтрол

    Какво е VBA?

    Какво представляват обектите, методите и свойствата във VBA?

    Опишете йерархията във VBA?

    Какво е процедура?

    Какво е контрол?

    Опишете синтаксиса на променливата?

    Какви типове константи се използват във VBA?

    За какво се използват функциите MsgBox и InputBox?

    Какви контролни конструкции се използват във VBA?

    Какво е събитие с персонализиран формуляр?

    Какво е персонализиран формуляр?

    Какви стилове на интерфейса се използват при създаване на персонализиран формуляр?

Терминологичен речник

VBA (Visual Basic за приложения) е обектно-ориентиран език за макро програмиране от високо ниво, вграден във всички програми в пакета Microsoft Office.

Макро (или макрос) е поредица от команди и функции, написани във VBA модул, който автоматизира основните операции.

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

Режимът на проектиране поставя Excel в режим, за да деактивира всички контроли в работния лист.

Обектът е всеки елемент от приложението ─ клетка, лист, работна книга, диаграма. Обектите могат да включват региони на клетки, граници на клетки, прозорци, скриптове, стилове и т.н. Всеки клас обекти има свой собствен набор от свойства, функции и събития.

Методът е действие, което може да се извърши върху обект.

Свойството е атрибут на обект, който описва как изглежда обектът (цвят, размер и местоположение) и как действа (дали е видим, дали се отнася до друг обект).

Събитие – взаимодействие на потребителя с конкретен обект в работния лист.

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

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

Променливата е именувана област от памет, използвана за съхранение на данни по време на изпълнението на процедура.

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

MsgBox - тази функция показва диалогов прозорец, съдържащ съобщение с дължина до 1024 знака, в което можете да включите стойността на променливите с помощта на операцията за конкатенация и (по избор) бутони за реагиране на дисплея на прозореца (по подразбиране само OK бутон).

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

Инструкцията If е оператор, който ви позволява да укажете изпълнението на определени действия в зависимост от посочените условия.

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

Разклоняването е контролна структура, която ви позволява да пропуснете определени групи инструкции при изпълнение, в зависимост от стойността на условието.

Цикълът е контролна конструкция, която ви позволява многократно да изпълнявате групи инструкции, преди да настъпи събитие.

Контролно събитие е сигнал, изпратен, когато нещо се случи с обект.

7. Обмен на данни в електронна таблица

Научете повече за това, което можете да правите във VBA

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

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

Персонализиране на потребителския интерфейс

Една от най-очевидните ситуации, в които трябва да използвате VBA, е да промените потребителския интерфейс на вашето приложение, за да го направите по-познат и удобен за вас.

(За всеки случай отбелязвам, че потребителският интерфейс означава как изглежда програмата на екрана, как мишката, клавиатурата и други различни средства, предоставени от програмата на вас, потребителя, за взаимодействие с софтуер.) В много приложения VBA ви позволява да променяте елементите на потребителския интерфейс по какъвто и да е начин. Само с няколко реда код можете да добавяте, премахвате или променяте относителното положение на бутоните в лентите с инструменти, да създавате нови ленти с инструменти, да отменяте оформлението на клавиатурата или да променяте структурата на менюто. На фиг. 1.1 показва прозореца Майкрософт Уърдс любезно модифициран потребителски интерфейс на VBA.

Ще ви трябва VBA, ако искате да работите с него Word документина чист екран, напълно свободен от всички ленти с инструменти

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

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

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

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

От книгата Да построим компилатор! автор Креншоу Джак

От книгата Ускорете сайта си автора Мациевски Николай

Нека разгледаме по-отблизо фиг. 3.1. Диаграма на предварителна и последваща проверка Когато браузърът получи заявка за отваряне на ресурс, който е в кеша, и кешът съдържа разширенията Cache-Control (изпратени от сървъра като част от заглавката на HTTP отговор), тогава IE използва тези

От книгата Win2K FAQ (v. 6.0) авторът Шашков Алексей

(1.13) Възможно ли е да се направи W2kServer от W2kPro и защо е необходимо? Мога. Въпреки че не :-) За това има програма, наречена NTSwitch. Всичко, което прави, е да запази копие на вашия регистър, да го редактира и да го възстанови обратно. Благодарение на различни версии

От студентската книга на AutoCAD 2009. Книга за самообучение автора Соколова Татяна Юриевна

(5.4) В 1C Счетоводство 6 вместо руски букви се показват кичури, какво може да се направи за това? Това е така, защото Microsoft промени името на шрифта MS SANS SERIF на MICROSOFT SANS SERIF, в резултат на което 1C Accounting не може да го намери. За да разрешите проблема, достатъчно е да промените

От книга Добавяне в количката. Ключови принципиувеличаване на конверсията на уебсайта автора Айзенберг Джефри

От книгата AutoCAD 2009. Курс на обучение автора Соколова Татяна Юриевна

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

От AutoCAD 2008 Student: Популярно ръководство за самообучение автора Соколова Татяна Юриевна

Повече за шаблона Набор от параметри на сесията може да бъде предоставен за снимки, които създавате по-късно. За да направите това, трябва да запишете документа като шаблон. Шаблонът обикновено е чертеж, който не съдържа никакви графични обекти и

От книгата Промоция: Тайни ефективна промоциясайтове автора Евдокимов Николай Семенович

Повече за шаблона Набор от параметри на сесията може да бъде предоставен за снимки, които създавате по-късно. За да направите това, трябва да запишете документа като шаблон. Шаблонът обикновено е чертеж, който не съдържа никакви графични обекти и

От книгата DirectX Graphics в Delphi авторът Краснов Михаил

Още за лепенето Лепенето е процес на идентифициране на няколко документа като копия от търсачката, в резултат на което само един от тях (една от страниците) остава в резултатите от търсенето. Когато се намерят копия търсачкаможе да лепи страници от един сайт или от различни

От книгата Дигитално списание "Компютъра" № 197 автора Списание Computerra

От книгата Програмиране за Linux. Професионален подход автор Мичъл Марк

Три заключения, които могат да се направят след обсъждане на причините за разликите между хората в цвета на кожата им Дмитрий Шабанов Публикувано на 31 октомври 2013 г. Двете предишни общи колони бяха посветени на анализа на един, в, много прост признак на човек -

От книгата C ++ за начинаещи автор Липман Стенли

4.1.4. Научете повече за идентификаторите на нишки Понякога се налага програма да определи коя нишка я изпълнява в момента. Функцията pthread_self () връща идентификатора на нишката, на която е извикана. Той е предназначен за сравняване на два различни идентификатора

От книгата Как тестват в Google автора Уитакър Джеймс

9.3.1. Още за точното съвпадение Най-простият случай възниква, когато типовете на действителните аргументи са същите като типовете. формални параметри... Например, има две претоварени функции max (), показани по-долу. Тогава всяко от извикванията на max () съвпада точно с едно

От книгата на автора

От книгата на автора

От книгата на автора

Малко повече за Buganizer Най-старата грешка, съобщена от Google, е създадена на 18 май 2001 г. в 15:33 и все още съществува днес. Нарича се "Тестова грешка" и описанието му изглежда като "Първа грешка!" Смешно е, че тази грешка все още се появява случайно, когато разработчиците се свързват

Написването на кода на вашите процедури и редактирането на макроси се извършва в редактора на Visual Basic, който е достъпен от раздела "Разработчик". Този раздел е скрит по подразбиране. За да го покажете, трябва да направите следното:

За Excel 2007... Отидете до Опции на Excel с помощта на бутона Office и в "Основни опции за работа с Excel" поставете отметка в квадратчето "Показване на раздела за програмисти на лентата".

За Excel 2010 и 2013... V Параметри на Excelтрябва да изберете елемента "Персонализиране на лентата" и в категорията на основните раздели да поставите отметка за раздела "Разработчик".

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

За да влезете в редактора на код, щракнете върху раздела за разработчици в областта Код на бутона Visual Basic.

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

№ 2 на снимката... Бутони за стартиране, спиране и прекъсване на изпълнението на код. По време на стартиране кодът на процедурата, върху която се намира курсорът, започва да се изпълнява. Тези бутони се дублират от раздела "Изпълнение" на главното меню на редактора.

#3 на снимката... Прозорецът за управление на проекти на VBA на работните книги (Project Explorer) и бутонът, който показва този прозорец.

№ 4 на изображението... Бутон, който показва прозореца Properties за обекти, избрани в прозорец № 3, и персонализирани елементи на формуляр (работата с обекти, техните свойства и методи ще бъдат обсъдени в отделна статия в тази категория).

№ 5 на снимката... Бутон за браузър на обекти. Той описва всички налични за работа обекти, техните свойства и методи.

Бутони № 3, № 4 и № 5 също са достъпни в раздела "Преглед" на главното меню на редактора. Там можете да се обадите и на други полезни прозорци, които няма да бъдат обсъждани в този материал.

Написване на проста процедура във Visual Basic за приложение

Кодът на всяка процедура (подпрограма) се намира в модула, така че трябва да го добавите, за да започнете програмирането. Изберете елемента "Модул" в раздела "Вмъкване" на главното меню на редактора на VBA. В основната област на редактора (в изображението, което има Сив фон) трябва да се появи нов кодов прозорец - Book_name - module_name (Код), а новосъздаденият модул ще бъде добавен към дървото на избрания проект в прозореца за управление на проекта (No3).

Добавете следния код към модула:

Sub MyProcedure () MsgBox "Здравей потребител!" Край под

Тази процедура показва диалогов прозорец със съобщението "Здравей потребител!" Тествайте го, като натиснете бутона Rub Sub (# 2 на изображението) или като го извикате като нормален макрос.

Сега нека разгледаме по-отблизо дадения код.

Всяка процедура започва с декларационен ред, състоящ се от оператора под(съкратено от Subprogram), последвано от името на подпрограмата. Името е последвано от списък с аргументи, затворени в скоби.

Има някои ограничения за името: то трябва да започва с буква и не трябва да съдържа интервали и повечето специални знаци.

Този пример не използва аргументи, така че са посочени празни скоби.

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

Последен редсъдържа оператор Крайследван от ключова дума поди докладва за приключване на процедурата.

Научете се да използвате браузъра на обекти

Функцията беше спомената по-горе MsgBox, но възможностите му не са напълно разгледани. то добър случайза да научите как да използвате браузъра на обекти (# 5 в изображението на прозореца на VBA Editor).

Натиснете бутона на панела или натиснете клавиша F2, за да се покаже браузърът на обекти:

Падащ списък № 1 съдържа списък на всички свързани библиотеки. Използвайте го само ако знаете точно към коя библиотека принадлежи класът, функцията и т.н. (можете да свържете или изключите всяка от наличните библиотеки, като изберете елемента „Референции“ в раздела „Инструменти“ на главното меню на VBA редактора).

Забележка: Библиотеките предоставят стандартни и допълнителни възможности за работа с обекти на Excel (клетки, листове, работни книги и др.), файлова система, изображения, бази данни и други.

Поле №2 е предназначено за търсене на свойства, методи, класове на свързани библиотеки.

Резултатите от търсенето се показват в поле №3 и представляват таблица с три колони: библиотека, клас и член на класа.

Поле № 4 съдържа списък на всички класове, избрани в поле № 1 на библиотеките.

Зона № 5 съдържа списък на всички членове на класа, избрани в поле № 4.

Поле № 6 съдържа бърза препратка към маркирания резултат от търсене, клас или член на класа.

Забележка: библиотеки, класове, функции и процедури (методи), свойства и др. в Object Browser имат различни значения, представени от набор от икони. Бърза справка(поле № 6) винаги показва кой тип елемент е избран. Обърнете внимание на това, за да се ориентирате по-добре в работата с обекти в бъдеще.

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

Сега нека намерим функцията MsgBox с помощта на Object Browser. В полето за търсене (№ 2) въведете името му и кликнете върху бутона с изображението на бинокъл. В полето с резултати от търсенето изберете реда със стойността MsgBox в колоната „Член“. В поле 6 се появи кратка информация, която ни информира, че избраният член е функция, има списък с аргументи, връща резултат от тип VbMsgBoxResult, принадлежи към класа Interaction на VBA библиотеката.

Получавам пълна помощкликнете върху бутона с изображението въпросителен знак... Зависи от Версии на Excel, Ще бъдете пренасочени към помощен файл или сайт за документация от Microsoft.

Разгледайте сами възможностите на функцията MsgBox.

Справка за VBA процедура

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

За по-добро разбиране помислете за пример (примерът използва псевдокод):

Начало_Процедури Всеки код Първи ред дублиран код Всеки код Последен ред дублиран код Всеки код Първи ред дублиран код Всеки код Последен ред дублиран код Всеки код End_Procedure

Преместете дублиращи се раздели с код в отделни процедури и свържете към тях от основната процедура:

Основна_Процедура_Старт Всеки код Препоръка за дубликат_код_процедура Всеки код Препоръка на процедура за дубликат_код Всеки код End_Main_Procedure Duplicate_code_Procedure_begin Всеки код Duplicate_code_Procedure_End

Обадете се на Macro1 „Следващият ред е идентичен с предишния. Macro1

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

Нямате достатъчно права да коментирате.