Vstupní funkce
Funkcí IF … THEN … ELSE předáte pokyn programu, jak má postupovat (ovlivníte běh), po jeho spuštění již ale nemáte přímou možnost, jak dále chod ovlivnit. Makro běží od začátku do konce bez zastavení.
Zjednodušeně řečeno, vstupními funkcemi ovlivníte běh makra po jeho spuštění. Krátký příklad osvětlí více.
Function vstup_1 dim cislo as integer, cislo2 as integer cislo = 1 cislo2 = 2 vstup = cislo + cislo2 print vstup end function
Zde jste definovali cislo a cislo2 přímo a zde:
Function vstup_2 dim cislo as integer, cislo2 as integer cislo = 1 cislo2 = inputbox("Zadejte číslo", "VSTUP") vstup = cislo + cislo2 print vstup end function
jste hodnotu proměnné cislo2 zadali až v průběhu makra.
A nyní přímo k vlastním funkcím.
INPUTBOX
Inputbox (vstupní box) je nejsnazší funkcí na předávání proměnných přímo programu. Použijete ji tehdy, když dopředu neznáte hodnotu, kterou chcete programu předat. Podobně jako např. při vyhledávání v textu, kdy po stisku [ CTRL + f] předáte programu, co má vyhledat, zadáte při Inputboxu hodnotu nebo text či cokoliv jiného, co budete potřebovat.
Inputbox nefunguje sám o sobě, což znamená, že ho musíte přiřadit k proměnné. V našem příkladu jste to provedli příkazem cislo2 = inputbox ("Zadejte číslo" , "VSTUP") .
Nyní si tento zápis rozebereme.
Cislo2 je název proměnné, kterou jste deklarovali jako číslo (cislo2 as integer)
Rovnítko (=) je jedním z nejdůležitějších příkazů v Basicu, tímto dáváte programu na vědomí, že proměnná je rovna hodnotě, která je za rovnítkem.
Inputbox ("Zadejte číslo" , "VSTUP") - inputbox (název funkce), následuje závorka, kde do uvozovek zadáváte text, který bude následně po spuštění programu zobrazen v dialogovém okně. Jako první se zadává text, který bude zobrazen přímo nad vstupem pro hodnotu. Zde je to "Zadejte číslo". Následuje čárka, kterou oddělíte text pro vstup a pro název okna. Název okna je text, který se objeví v modré liště stejně jako u kteréhokoliv okna otevřeného na vašem počítači.
TIP: Inputbox má ještě jednu užitečnou vlastnost, a to možnost přednastavení určité hodnoty. Pokud bychom za "VSTUP" dopsali ještě jeden parametr, například 10, bude 10 zobrazena i při vyvolání makrem v I nputboxu jako přednastavená hodnota.
MSGBOX
Msgbox (message box – box zprávy) je další funkcí, kterou budete používat všude tam, kde chcete ovlivnit chod makra po jeho spuštění, a to bez předávání hodnot proměnných.
V praxi se otevře dialogové okno s textem, který jste naprogramovali, a potvrzením (OK, ZRUŠIT…) volíte, jak má program dále postupovat.
Dialog MSGBOX se dvěma tlačítky
Ukážeme si příklad na přepsání hodnoty buňky v Calcu, kde si před přepsáním hodnoty naprogramujete dotaz, zda má být hodnota opravdu přepsána. Zjistíte, zda je buňka prázdná, a použijete Inputbox pro zadání hodnoty, která má původní hodnotu nahradit.
Sub prepis dim bunka as object bunka = thisComponent.Sheets(0).getCellRangeByName("A1") if bunka.string = "" then ' pokud je buňka prázdná hodnota = inputbox("Nová hodnota") bunka.string = hodnota else dotaz = msgbox("Opravdu chcete přepsat hodnotu?",1,"Dotaz") if dotaz = 1 then hodnota = inputbox("Nová hodnota") bunka.string = hodnota else exit sub endif endif end sub
Msgbox má o jeden vstupní parametr více než inputbox, a to je číslo mezi textem v okně a názvem okna. Tímto číslem určíte, jaké volby (druhy tlačítek) mají být zobrazeny po vyvolání funkce.
TIP: Čísla se při zadávání sčítají. Pokud tedy chcete mít zobrazena tlačítka Ano, Ne a Zrušit (společně s otazníkem) a určit tlačítko Ano jako výchozí, musíte sečíst všechny hodnoty 3 + 32 + 128, nebo zadat přímo výsledné číslo 163.
Hodnoty
0: Zobrazí se pouze tlačítko OK.
1: Zobrazí se tlačítka OK a Zrušit.
2: Zobrazí se tlačítka Zrušit, Opakovat a Ignorovat.
3: Zobrazí se tlačítka Ano, Ne a Zrušit.
4: Zobrazí se tlačítka Ano a Ne.
5: Zobrazí se tlačítka Opakovat a Zrušit.
16: Do dialogového okna je přidána ikona Zastavit.
32: Do dialogového okna je přidána ikona Otazník.
48: Přidá do dialogu ikonu vykřičníku.
64: Do dialogového okna je přidána ikona Informace.
128: První tlačítko v dialogu je použito jako výchozí tlačítko.
256: Druhé tlačítko v dialogovém okně je použito jako výchozí tlačítko.
512: Třetí tlačítko v dialogovém okně je použito jako výchozí tlačítko.
Dialog MSGBOX s třemi tlačítky a
otazníkem
Samozřejmě potřebujete i hodnoty, které zjistí, jaké tlačítko jste stiskli. Toto zjištění jsme provedli v našem testu funkcí IF, kde jsme si zajistili, že po stisknutí OK pokračujeme vstupem Inputbox. V opačném případě ukončujeme program (Else Exit sub).
Návratová hodnota:
1: OK
2: Zrušit
3: Zrušit
4: Opakovat
5: Ignorovat
6: Ano
7: Ne
Zpočátku si dávejte pozor na záměnu OK a Ano. Než jsem si na toto zvykl, dohledával jsem chybu někde jinde.
Pro každou návratovou hodnotu si můžete stanovit další příkazy podle toho, jak chcete pokračovat.
Funkci Msgbox můžete použít i bez přiřazení proměnné, zde potom slouží pouze jako zobrazení hodnot a nemá vliv na další kroky makra. Obdobně slouží příkaz Print.
TIP: Pokud chcete použít Msgbox jako zobrazovací funkci, nemusíte zadávat jeho další parametry, jako je druh tlačítka a text názvu okna (pokud nechcete). Zobrazí se pak systémový název okna „soffice“.
Sub print_msgbox dim a as string a = "ahoj" msgbox "Pozdrav " + a print "Pozdrav " + a end sub
Jediný rozdíl je v tom, že u Print nemáte vliv na zobrazený text v okně, protože zobrazuje pouze proměnnou.
BEEP
Příkaz Beep sice není vstupní funkce, ale zmiňuji ji zde proto, že ji v souvislosti se vstupními funkcemi můžete použít. Beep je příkaz na přehrání systémového zvuku výstrahy. Nevrací žádnou hodnotu ani nemá jakýkoliv vliv na běh programu, slouží pouze jako upozornění.
Sub test_beep beep end sub
Toto je praktická ukázka, ale Beep můžete vnořit kamkoliv ve vašem makru jako samostatný příkaz. V našem příkladu bych ho použil před dotazem, zda chcete hodnotu přepsat či ne.
beep dotaz = msgbox("Opravdu chcete přepsat hodnotu?", 1, "Dotaz")
Dialogová okna
Dialogová okna jsou nejrozsáhlejším typem vstupních funkcí. Nejrozsáhlejším proto, že jejich vzhled a funkce programujete vy sami.
Vzhledem k rozsáhlosti a komplikovanosti dialogových oken si pro ně vyhradíme vlastní část seriálu.