The Формуляр за резервация на курса е проста форма, илюстрираща принципите на дизайна на UserForm и свързаното с VBA кодиране.
Той използва селекция от контроли, включително текстови полета, комбинирани полета, бутони с опции, групирани в рамка, квадратчета за отметка и командни бутони.
Когато потребителят натисне бутона OK, въвеждането им се въвежда в следващия наличен ред на работния лист.
Описание на Excel форма:
Има две прости текстови полета (Име: и Телефон:), в които потребителят може да въведе свободен текст, и две комбинирани полета (Отдел и Разбира се), което позволява на потребителя да избере елемент от списъка.
Има три бутона за опции (Въведение, Междинен и Разширено) групирани в рамка (Ниво), така че потребителят да може да избере само една от опциите.
Има две квадратчета за отметка (Обяд е задължителен и Вегетариански) че, тъй като не са групирани в рамка, и двете могат да бъдат избрани, ако е необходимо. Въпреки това, ако лицето, което прави резервацията, не иска обяд, не е необходимо да знаем дали са вегетарианци или не. Така че Вегетариански квадратчето за отметка е затъмнено, докато е необходимо.
Има три командни бутона (Добре, Отказ и Чиста форма) всеки от които изпълнява предварително дефинирана функция при щракване.
Настройки на свойствата на контрола:
Контрол | Тип | Имот | Настройка |
UserForm | UserForm | Име | frmCourseBooking |
Надпис | Формуляр за резервация на курса | ||
Име | Текстово поле | Име | txtName |
Телефон | Текстово поле | Име | txtPhone |
Отдел | Комбинирана кутия | Име | cboDepartment |
Разбира се | Комбинирана кутия | Име | cboCourse |
Ниво | Кадър | Име | fraLevel |
Надпис | Ниво | ||
Въведение | Бутон за опция | Име | optIntroduction |
Междинен | Бутон за опция | Име | optIntermediate |
Разширено | Бутон с опции | Име | optAdvanced |
Обяд е задължителен | Поле за отметка | Име | chkLunch |
Вегетариански | Поле за отметка | Име | chkВегетариански |
Активирано | Фалшиво | ||
Добре | Команден бутон | Име | cmdOk |
Надпис | Добре | ||
По подразбиране | Вярно | ||
Отказ | Команден бутон | Име | cmdОтказ |
Надпис | Отказ | ||
Отказ | Вярно | ||
Чиста форма | Команден бутон | Име | cmdClearForm |
Създаване на формуляри в Excel
Ако искате сами да изградите формуляра, просто копирайте оформлението, показано на илюстрацията по -горе. Следвайте стъпките по -долу:
1. Отворете работната книга, в която искате да принадлежи формулярът (UserForms като макроси трябва да бъдат прикрепени към работна книга) и преминете към редактора на Visual Basic.
2. В редактора на Visual Basic щракнете върху Поставете UserForm бутон (или отидете на Вмъкване> Потребителска форма).
3. Ако кутията с инструменти не се появи сама (първо щракнете върху формуляра, за да се уверите, че не се крие) щракнете върху Кутия за инструменти бутон (или отидете на Изглед> Кутия с инструменти).
4. За да поставите контрол върху формуляра, щракнете върху съответния бутон в кутията с инструменти, след което щракнете върху формуляра. Контролите могат да се преместват, като се плъзгат за ръбовете им, или да се преоразмерява чрез плъзгане на бутоните по периметъра им.
5. За да редактирате свойствата на контрола, уверете се, че избраната контрола е избрана, след което направете съответните промени в Имоти прозорец. Ако не виждате прозореца със свойства, отидете на Изглед> Прозорец със свойства.
6. За да премахнете контрола от формуляра, изберете я и щракнете върху Изтрий клавиш на клавиатурата.
UserForm всъщност няма да направи нищо, докато не бъде създаден кодът, който управлява формуляра и неговите различни контроли. Следващата стъпка е да напишете кода, който задвижва самата форма.
Добавяне на кода: 1 Инициализиране на формуляра
Инициализиране на формуляра:
Повечето формуляри се нуждаят от някакъв вид настройка при отваряне. Това може да задава стойности по подразбиране, да се увери, че полето е празно, или да изгражда списъци с комбинирани полета. Този процес се нарича Инициализиране на формуляра и за него се грижи макрос, наречен UserForm_Initialize (в случай, че сте объркани от моето различно изписване на думата „initialis (z) e“, това е защото говоря английски и VBA говори американски - но не се притеснявайте, VBA ще изпишете го вместо вас!). Ето как да изградите кода за инициализиране на формуляра за резервация на курса:
1. За да видите прозореца с код на формуляра, отидете на Изглед> Код или щракнете F7.
2. При първото отваряне на кодовия прозорец той съдържа празен UserForm_Click () процедура. Използвайте падащите списъци в горната част на прозореца на кода, за да изберете UserForm и Инициализирайте. Това ще създаде необходимата процедура. Вече можете да изтриете процедурата UserForm_Click ().
3. Въведете следния код в процедурата:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" С cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch". AddItem "Transportation" End with cboDepartment.Value = "" С cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" Край с cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Как работи инициализиращият код:
Целта на процедурата UserForm_Initialize () е да подготви потребителския формуляр във VBA за използване, като зададе стойностите по подразбиране за различните контроли и създаде списъците, които ще се показват в полетата за съчетание.
Тези редове задават празно съдържанието на двете текстови полета:
txtName.Value = "" txtPhone.Value = ""
Следват инструкциите за комбинираните кутии. На първо място се посочва съдържанието на списъка, след което първоначалната стойност на полето за поле се задава на празно.
С cboDepartment .AddItem „Продажби“ .AddItem „Маркетинг“ (колкото е необходимо …) Край с
cboDepartment.Value = ""
Ако е необходимо, може да се направи първоначален избор от групата опции, в този случай:
optIntroduction = Вярно
И двете квадратчета са зададени на False (т.е. без отметка). Задайте на True, ако искате квадратчето да се показва вече маркирано:
chkLunch = False
chkVegetarian = False
И накрая, фокусът се насочва към първото текстово поле. Това поставя курсора на потребителите в текстовото поле, така че не е необходимо да щракват върху полето, преди да започнат да въвеждат:
txtName.SetFocus
Добавяне на кода: 2 Задействане на бутоните
Във формуляра има три командни бутона и всеки трябва да се захранва от собствена процедура. Като започнем с простите…
Кодиране на бутона за отмяна:
По -рано използвахме прозореца със свойства, за да зададем Отказ свойство на бутона Отказ до Вярно. Когато зададете свойството Cancel на командния бутон на True, това има ефект на „щракване“ на този бутон, когато потребителят натисне бутона Esc клавиш на клавиатурата им. Но само това няма да причини нищо да се случи с формата. Трябва да създадете кода за събитието щракване на бутона, което в този случай ще затвори формуляра. Ето как:
1. Когато UserForm е отворен за редактиране във Visual Basic Editor, щракнете двукратно върху бутона Cancel. Кодният прозорец на формуляра се отваря с cmdCancel_Click () процедура готова за редактиране.
2. Кодът за затваряне на формуляр е много прост. Добавете ред код към процедурата, така че да изглежда така:
Private Sub cmdCancel_Click () Unload Me End Sub
Кодиране на бутона за изчистване на формата:
Добавих бутон, за да изчистя формата, в случай че потребителят иска да промени мнението си и да нулира всичко, и да улесни, ако трябва да направи няколко резервации едновременно. Всичко, което трябва да направите, е да стартирате отново процедурата Initialise. На макрос може да се каже да изпълнява друг макрос (или серия от макроси, ако е необходимо) с помощта на Повикване ключова дума:
1. Щракнете двукратно върху бутона Изчистване на формуляра. Кодният прозорец на формуляра се отваря с cmdClearForm_Click () процедура готова за редактиране.
2. Добавете ред код към процедурата, така че да изглежда така:
Private Sub cmdClearForm_Click () Обадете се на UserForm_Initialize End Sub
Кодиране на бутона OK:
Това е парчето код, което трябва да свърши работата по прехвърлянето на избора на потребителя и въвеждането на текст върху работния лист. Когато зададем свойството Cancel на бутона Cancel на True, ние също задаваме бутоните OK По подразбиране имот да Вярно. Това е натискане на бутона OK, когато потребителят натисне Въведете (или Връщане) на клавиатурата им (при условие, че не са използвали своята Раздел ключ за табулация към друг бутон). Ето кода, за да може бутонът да работи:
1. Щракнете двукратно върху бутона OK. Кодният прозорец на формуляра се отваря с cmdOK_Click () процедура готова за редактиране.
2. Редактирайте процедурата, за да добавите следния код:
Частен под cmdOK_Click () ActiveWorkbook.Sheets ("Записвания на курсове"). Активирайте диапазона ("A1"). Изберете Do If IsEmpty (ActiveCell) = FalseТогава ActiveCell.Offset (1, 0). Изберете End If Loop Until IsEmpty (ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value Ако optIntroduction = True ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Тогава ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If Ако chkLunch = True Тогава ActiveCell.Offset (0, 5) .Value = "Да" Друго ActiveCell.Offset (0, 5) .Value = "Не" Край Ако Ако chkVegetarian = True Тогава ActiveCell.Offset (0, 6). Value = "Yes" Else If chkLunch = False Тогава ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "No" End If End If Range ("A1"). Изберете End Sub
Как работи кодът CmdOK_Click:
Първите два реда се уверете, че правилната работна книга е активна и премества селекцията в клетка A1:
ActiveWorkbook.Sheets ("Записвания на курсове"). Активирайте диапазона ("A1"). Изберете Следващите няколко реда преместват селекцията надолу в работния лист, докато намери празна клетка: Do If IsEmpty (ActiveCell) = False Тогава ActiveCell.Offset (1 , 0). Изберете Край, ако цикълът до IsEmpty (ActiveCell) = Истина
Следващите четири реда започват да записват съдържанието на формуляра в работния лист, като използват активната клетка (която е в колона А) като препратка и преместване по реда клетка наведнъж:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Сега стигаме до бутоните с опции. Те са поставени в рамка на формуляра, така че потребителят може да избере само един. Изявление IF се използва, за да инструктира Excel какво да прави за всяка опция:
Ако optIntroduction = True Тогава ActiveCell.Offset (0, 4) .Value = "Въведение" ElseIf optIntermediate = Вярно Тогава ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = „Adv“ Край Ако
VBA IF изявленията са много по -лесни за управление от функцията IF на Excel. Можете да имате колкото искате опции, просто вмъкнете допълнителна Иначе за всеки един. Ако имаше само две възможности, нямаше да имате нужда от тях Иначе, само Ако и Иначе би било достатъчно (не забравяйте - всички те се нуждаят от Край Ако).
За всяко квадратче за отметка има още един оператор IF. За квадратчето Lunch Required, отметка в полето означава „Да“, човекът се нуждае от обяд, а няма отметка означава „Не“, не го правят.
Ако chkLunch = True, тогава ActiveCell.Offset (0, 5) .Value = "Да" Иначе ActiveCell.Offset (0, 5) .Value = "Не" Край Ако
Можем да използваме подобно IF изявление за квадратчето за вегетарианство, но ако лицето не се нуждае от обяд, няма значение дали е вегетарианец или не. Във всеки случай би било погрешно да се приеме, че те не са вегетарианци, просто защото не изискват обяд. Следователно операторът IF съдържа втори, вложен if израз:
Ако chkVegetarian = True Тогава ActiveCell.Offset (0, 6) .Value = "Да" Иначе Ако chkLunch = False Тогава ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Не" Край Ако Край Ако
Отметката в полето означава „Да“, човекът е вегетарианец. Ако няма отметка в полето, вложеният оператор IF разглежда квадратчето Lunch Required. Ако в квадратчето Задължителен обяд има отметка, тогава няма отметка в квадратчето Вегетариански, което означава, че лицето не е вегетарианец, така че вмъква „Не“ в клетката. Въпреки това, ако квадратчето Lunch Required не съдържа отметка в него, тогава ние не знаем дали лицето е вегетарианец (няма значение и без това), така че клетката се оставя празна ("").
Накрая селекцията се връща в началото на работния лист, готова за следващия запис:
Диапазон ("A1"). Изберете
Добавяне на код 3: Манипулиране на формуляра
И накрая, пример за това как контролите върху формуляр могат да бъдат манипулирани, докато той се използва. Когато свойствата на контрола бяха зададени, Активирано свойството на квадратчето за вегетариански е поставено на Фалшиво. Когато контролът не е активиран, потребител не може да въведе стойност в него, въпреки че може да съдържа стойност, която вече е била там, и VBA може да добавя, премахва или променя стойността.
Не е нужно да знаем дали лицето е вегетарианец (дори и да е!), Ако не поръчва обяд. Така че квадратчето Вегетарианско остава деактивирано, освен ако в квадратчето Lunch Required не е поставена отметка. След това потребителят е свободен да постави отметка в квадратчето Вегетариански, ако желае. Ако поставят отметка, ще знаем, че са отговорили с „Да“, а ако не, знаем, че са отговорили с „Не“.
Можем да превключим на Активирано имот от Фалшиво да се Вярно като има процедура, която се изпълнява автоматично всеки път, когато стойността на квадратчето Lunch Required се промени. За щастие, повече контроли имат Промяна процедура и тази, която използваме тук, е chkLunch_Change (). Ще използваме това, за да активираме квадратчето Вегетариански, когато е поставено отметка в квадратчето Задължителен обяд, и да го деактивираме, когато квадратчето Задължително обяд не е поставено.
Има само още едно нещо, което трябва да направим. Да предположим, че някой е поставил отметка в квадратчето Задължителен обяд, както и в квадратчето Вегетариански. След това промениха решението си и премахнаха отметката от квадратчето Lunch Required. Полето за отметка Вегетарианско ще бъде деактивирано, но отметката, поставена по -рано, ще остане.
Допълнителен ред код може да гарантира, че отметката е премахната, когато полето е деактивирано. Ето цялата работа:
Частно подчинение chkLunch_Change () If chkLunch = True Тогава chkVegetarian.Enabled = True Иначе chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Отваряне на формуляра
Формулярът вече е готов за използване, така че трябва да се отвори с обикновен макрос. Това може да бъде прикрепено към персонализиран бутон на лентата с инструменти, команден бутон, изчертан на работния лист, или към всяка друга графика (щракнете с десния бутон върху графиката и изберете Присвояване на макрос). Ако е необходимо, създайте нов модул за работната книга и добавете тази процедура:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Ако ви харесаха нашите блогове, споделете го с приятелите си във Facebook. Можете също така да ни следвате в Twitter и Facebook.
Ще се радваме да чуем от вас, уведомете ни как можем да подобрим, допълним или обновим работата си и да я подобрим. Пишете ни на имейл сайта