Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-formulare » navod-formular-A-Z
Microsoft Excel logo

Formulář návod od A do Z - Excel VBA - Userform

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

Vše co se chcete zeptat o formulářích a bojíte se. Vytvořte formulář, který dokáže do tabulky zadat údaje, v již zananých datech údaj vyhledat a zobrazit a případně tento udaj upravit (aktualizovat).

Úvodem do formulářu - od A do Z

Cílem tohoto článku je vytvořit formulář, který se spustí tlačítkem umístným v listu. Formulář bude obsahovat zadávací prvky (TextBox), včetně tlačítek (zapsat, smazat, zrušit). Klikem na tlačítka (vložením hodnoty do TextBoxu) se provede příslušná událost (zapis, vyhledání, smazání). Pro přehledost (a možnost se odkazovat na konkretní část) je článek rozdělen na jednotlivé kapitoly.

Seznam kapitol

Úvod jak bude formulář vypadat

Cílem je vytvořit jednoduchý formulář, který bude mít tři TextBoxy, jeden CheckBox a dva OptionButton a tři tlačítka. Cílem je po zadání Id, které již existuje vypsat údaje z daného řádku v databázi (tabulky), pokud ne nevypíše se nic. Po vyplnění (změně) údajů se tyto buď přidají do databáze (tabulky), nebo se přepíšou (aktualizují) původní hodnoty (údaje).

Formulář bude vypadat přibližně takto:

Formulář Excel - VBA - ukázka

Další informace

Data se budou ukládat do stejného list. Popis hlavičky je proveden ručně. Jednotlivé sloupce budou pojmenovány:

  • Id
  • Jméno
  • Příjmení
  • Muž
  • Kuřák

Tlačítko které spustí formulář

Jako první je potřeba do listu vložit tlačítko, které spustí formulář (lze spouštět automaticky při spuštění Excel, ale tohle nechci). Tlačítko vložíte z Karty Vývojář sekce Ovládací prvk - ikona Vložit a vyberte Příkazové tlačítko z část Oládací prvky ActiveX.

Aby tlačítko fungovalo, přidáme mu správný VBA kód (dvojklik na tlačítko).

Private Sub CommandButton1_Click() ' Ukaž / zobraz formulář UserForm1.Show End Sub

Poznámky

(Name) ve vlastnostech vloženého tlačítka neměnit. Vím, že z důvodu přehlednost a celkové struktury se hodí lépe přejmenovat, ale v ukázce mám požadavek na jednoduchost vytvoření.

Formulář si vytvoříme v dalším kroku, protože opět nebudeme měnit jeho defaultní název (Name) UserForm1, proto můžete kód rovnou napsat.

Tlačítko si můžete přejmenovat v sekci Caption.

List bude vypadat

MS Excel 2010 - Úvodní obrazovka

Další informace jak vkládat tlačítko

Jak vkládat tlačítka jsem podrobně sepsal v článku: Tlačítko které spustí formulář

Vložení formuláře

Prvním úkolem je vložt formulář, který bude obsahovat patřičné prvky:

  • TextBox
  • Label
  • Tlačítka

Ve VBA z menu Insert - UserForm Formulář ještě zvětšíme, protože budeme přidávat další prvky. Protože cílem formuláře je v prvním kroku zadat ID. Abych postup usnadnil, fokusuji (přenesu kurzor) do prvku ve kterém se bude zadávat ID. V našem případě první TextBox. Proto doplníme formulář o akci, které se stane při inicializaci.

Private Sub UserForm_Initialize() TextBox1.SetFocus End Sub UserForm Excel VBA

Další informace

Jak vkládat fomuláře mám podrobněji sepsáno: VBA – první formulář.

Vložení TextBox

Vložíte tři TextBox pro vložení Id, jména a příjmení. Následně je pomocí Label popíšete. Do TextBox1 se bude zadávat Id (číslem). Pokud je zadáno tak se zkontroluje, zda jde o číslo. Pokud ano prohleda se databáze zda již zadané číslo neobsahuje (pokud ano načtu se data z databáze - přepíš již zadané údaje). Pokud je zadáno číslo a není záznam v databázi k dispzici, tak se vymažou data z formuláře a zůstane jen ID. Pokud je zadán něco jiného než číslo vymažu se zdané hodnoty včetně ID.

Po vložení TextBoxů bude vypadat:

Excel UserForm TextBox

Doplnění o kód

TextBox1 - do kterého se zadává ID bude reeagovat na změno a pokud e zadá číslo (znak) spustí se skript a zkontrolují zadané hodnoty.

Ve skriptu jsou již odkazy na prvky, které zatím ve formuláři nemáte (OptionButton1 a OptionButton2, potažmo CheckBox1) ty si vložíte v dalších kapitolách.

Private Sub TextBox1_Change() ' reaguje na změnu, pokud je vložena hodnota > udállost > provede se načtení tohoto skriptu ' proměnné Dim id As Integer, i As Integer, j As Integer, pomoc As Boolean ' kontrola zfa je číslo If IsNumeric(UserForm1.TextBox1.Value) Then ' MsgBox ("je číslo") i = 1 'd i vloží 1 id = UserForm1.TextBox1.Value ' načte číslo pomoc = False ' předpoklad že není nalezeno > dojde k vymazání ' dokud existuje ID hledej Do While Cells(i, 1).Value <> "" If Cells(i, 1).Value = id Then pomoc = True ' nalezeno tak se nic mazat nebude For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = Cells(i, j).Value Next j ' načte pohlaví If Cells(i, 4).Value = True Then UserForm1.OptionButton1.Value = True Else UserForm1.OptionButton2.Value = False End If 'načte kuřáka If Cells(i, 5).Value = True Then UserForm1.CheckBox1.Value = True Else UserForm1.CheckBox1.Value = False End If End If i = i + 1 Loop If pomoc = False Then 'protože nebylo nalezeno tak se vymaží údaje pro jméno , přijmené atd (Id zůsstane) For j = 2 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j ' pro pohlaví For j = 1 To 2 UserForm1.Controls("OptionButton" & j).Value = False Next j 'pro kuřák ' CheckBox UserForm1.CheckBox1.Value = False End If ' pokud není číslo vymaž form Else 'MsgBox ("není číslo") 'odkazuje se na dalšší skript, které reaguje i na tlačítko. SmazFormular End If End Sub

Vložení Label

Jde jen o popisky, protože je potřeba vědět, co do kterého textboxu zapsat. Zatím máte jen vloženy Textboxy a ty popíšeme, jakmile vložíte další prvky v následujících kapitolách již budete moci přímo popisovat.

Excel UserForm - Label

Další informace

V přípravě

Vložení tlačítek

Poslední věc bez které se neobejdete. Klikem na ně buď smažete obsah, nebo hodnot zpíšete/přepíšete. Případně formulář zrušíte.

  • Přidej / uprav data
  • Vyčisti data
  • Zruš formulář
Formulář doplněn o tlačítka

Kód pro tlačítko: Přidej / uprav data

Private Sub CommandButton1_Click() EditAdd End Sub

Vlastní skript PridejUprav

Sub PridejUprav() Dim id As Integer, i As Integer, j As Integer, pomoc As Boolean Dim PosledniRadek As Long 'globální prměná kontrola = False ' kontrola, zda je vše vvyplněno Zkontroluj MsgBox (kontrola) If UserForm1.TextBox1.Value <> "" And kontrola = True Then id = UserForm1.TextBox1.Value PosledniRadek = WorksheetFunction.CountA(Range("A:A")) i = 0 pomoc = False For i = 1 To emptyRow If Cells(i + 1, 1).Value = id Then pomoc = True For j = 2 To 3 Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value Next j ' pohlaví If UserForm1.OptionButton1.Value = True Then Cells(i + 1, 4).Value = "TRUE" Else Cells(i + 1, 4).Value = "FALSE" End If 'kouří If UserForm1.CheckBox1.Value = True Then Cells(i + 1, 5).Value = "TRUE" Else Cells(i + 1, 5).Value = "FALSE" End If End If Next i If pomoc = False Then ' jména For j = 1 To 3 Cells(PosledniRadek + 1, j).Value = UserForm1.Controls("TextBox" & j).Value Next j ' pohlaví If UserForm1.OptionButton1.Value = True Then Cells(PosledniRadek + 1, 4).Value = "TRUE" Else Cells(PosledniRadek + 1, 4).Value = "FALSE" End If 'kouří If UserForm1.CheckBox1.Value = True Then Cells(PosledniRadek + 1, 5).Value = "TRUE" Else Cells(emptyRow + 1, 5).Value = "FALSE" End If End If End If End Sub

Vlastní skript Zkontroluj

Sub Zkontroluj() ' Pokud pohlaví bude vyplněno If UserForm1.OptionButton1.Value = True Or UserForm1.OptionButton2.Value = True Then ' pohlaví OK kontrola = True Else MsgBox ("Vyplnit pohlaví!") kontrola = False End If ' lze kontrolovat i jiné data (jméno) End Sub

Kód pro tlačítko: Vyčisti data

Spouští SmazFormular

Private Sub CommandButton2_Click() SmazFormular End Sub

Vlastní skript SmazFormular

Sub SmazFormular() ' smazání dat pokud chci, nebo pokud není číslo. For j = 1 To 3 UserForm1.Controls("TextBox" & j).Value = "" Next j ' Pohlaví For j = 1 To 2 UserForm1.Controls("OptionButton" & j).Value = False Next j ' CheckBox UserForm1.CheckBox1.Value = False End Sub

Kód pro tlačítko: Zruš formulář

Private Sub CommandButton3_Click() Unload Me End Sub

Vložení OptionButton

Potřebuji aby uživatel každopádně vyplnil pohlaví, protože v kódech výše je již s uvedenými kopomentami ve formuláři počítano.

Excel UserForm - OptionButton

Další informace

Jak vkládat OptionButton a co ze s tímto prvkem dělat jsem podrobně sepsal v článku: OptionButton.

Vložení CheckBox

Další prvek, který můžeme mít na formuláři je CheckBox. V totmo příkladu je k zaškrtnutí pokud je daný člověk kuřák.

Excel UserForm - CheckBox

Další informace

Jak vkládat OptionButton a co ze s tímto prvkem dělat jsem podrobně sepsal v článku: CheckBox.

Proměné

Protože se předává kontrola v rámci skriptu (potřebuji vědět zda vybrán muž nebo žena) je potřeba přidát modul a do modulu vložit kód globální:

Global kontrola As Boolean

Další informace

V přípravě jak vkládat modul a jak sou na tom proměné.

Hotovo

Máme hotovo.

Pokud se povedlo gratuluji. Článek bude postupně doplněnván.

Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor ke stažení je v přípravě.


Závěrem

Využívate formuláře? Máte nějaké zajímavé skripty, můžete se pchlubit v komentářích.

Článek byl aktualizován: 19.09.2020 11:06

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


Petr Pecháček

Přidáno: 18.04.16 23:52

Jak pardon, ale tohle je zvěrstvo. Začíná to tím, že pro ID by měl být použit ComboBox... A celá ta konstrukce, vyhledávání.. ne Pavle, ale tohle od Vás neberu, tohle je lepší zmačkat, zahodit a začít znovu.

Pavel Lasák

Přidáno: 19.04.16 12:06

To Petr Pecháček: Děkuji Vám za podnětné doplnění. Holt byl požadavek na TextBoox (jen nebudu sdělovat čeho se týkal). ComboBox bude v dalším článku i se zobrazením více sloupců atd. V dalším článku zase různé příklady na "vyhledávání". Uživatel si pak vybere, co bude chtít použít.






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |