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).
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.
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:
Data se budou ukládat do stejného list. Popis hlavičky je proveden ručně. Jednotlivé sloupce budou pojmenovány:
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
(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.
Jak vkládat tlačítka jsem podrobně sepsal v článku: Tlačítko které spustí formulář
Prvním úkolem je vložt formulář, který bude obsahovat patřičné prvky:
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
Jak vkládat fomuláře mám podrobněji sepsáno: VBA – první formulář.
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:
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
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.
V přípravě
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.
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
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
Private Sub CommandButton3_Click()
Unload Me
End Sub
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.
Jak vkládat OptionButton a co ze s tímto prvkem dělat jsem podrobně sepsal v článku: OptionButton.
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.
Jak vkládat OptionButton a co ze s tímto prvkem dělat jsem podrobně sepsal v článku: CheckBox.
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
V přípravě jak vkládat modul a jak sou na tom proměné.
Máme hotovo.
Pokud se povedlo gratuluji. Článek bude postupně doplněnván.
Soubor ke stažení je v přípravě.
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
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.
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ů.
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.
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.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
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 |