Předávání hodnot do proměnných

programovani.png Jestliže má vaše makro v OpenOffice.org pracovat s určitými hodnotami, musíte mu je nějakým způsobem předat. Možností, jak to udělat, je více, dnes si ukážeme vstupní funkce, kterými předáte hodnoty v průběhu makra. Jde o hodnoty, které se mohou měnit a dopředu je neznáte. Vstupní funkce nemusí pouze předávat hodnoty, ale můžete je využít i k přímému řízení běhu programu.  

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") .

Dialogové okno INPUTBOX Dialogové okno INPUTBOX

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 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 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.

(Jako ve škole) Průměr: 1.12 | Hodnotilo: 17
 

Komentáře

user avatar holy
Odpovědět
Předávání hodnot do proměnných
19. 07. 2013, 12:27:13
Zdravím, zajimalo by mě zda můžu předat hodnotu pri spuštění např wtiteru ve win příkazové řadce např soffice --writer mojepromenna=123 ?

děkuji
user avatar jipi
Odpovědět
Přerušení chodu makra pro úpravy v listu s následným pokračování chodu spuštěného makra
17. 10. 2014, 15:12:05
Dobrý den.
Mám problem.
rád bych automaticky přerušil na základě hodnoty v buňce chod makra pro úpravy v listu a pokud hodnota v buňce po úpravách docílí danou hodnotu, spuštěné makro bude pokračovat v chodu a provede další přerušení- nepřeruší na základě hodnoty v buňce (cyklus)

děkuji ze help.

jipi

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Daniel Sedláček

Daniel Sedláček

Amatérsky se věnuji programování maker od podzimu 2010.
Aktivní jsem na fóru od ledna 2011.
Od července 2011 spolupracuji i jako moderátor fóra.

Využívám pouze OpenOffice.org (LibreOffice nemám nainstalován).

 
 
 
woo jaw demo hz