Rozsáhlejší programy zpravidla obsahují větší množství formulářů a procedur událostí, které využívají určité proměnné a rutiny. Implicitně je každá proměnná lokální pro svoji vlastní proceduru událostí. To znamená, že taková proměnná se dá číst a měnit jen z té procedury události, ve které byla vytvořena. Podobně procedury události jsou lokální vůči formuláři, ve kterém jsme je vytvořili.
Proměnné a procedury, které mají být společné pro všechny formuláře a procedury událostí určitého projektu, musíme deklarovat v určitém standardním modulu stejného projektu.
Standartní modul neboli modul kódu je speciální soubor s příponou .bas, který obsahuje globální neboli veřejné proměnné a procedury typu Function, Sub a Property (funkce a podprogramy). Tyto proměnné a procedury lze použít kdekoli v projektu.
Pro vytvoření nového standardního modulu můžete použít tří postupů. Všechny postupy jsou si rovnocenné a je pouze na Vás, který postup Vám bude vyhovovat.
První postup otevření nového standardního modulu pomocí použití okna Prohlížeč projektů:
Druhý postup otevření nového standardního modulu pomocí panelu nástrojů Standartní:
Poslední postup otevření nového standardního modulu pomocí nabídky Vložit:
Deklarujeme-li proměnnou na úrovni modulu jako veřejnou, je dostupná všem procedurám projektu. V následujícím příkladu lze proměnnou strZpr typu řetězec používat ve všech procedurách všech modulů projektu:
' Řádek vložíme do odstavce deklarací modulu. Public strZpr As String
Všechny procedury jsou ve výchozím stavu veřejné, až na procedury událostí. Vytvoří-li program Visual Basic proceduru události, před deklaraci procedury se automaticky vloží klíčové slovo Private. U všech ostatních procedur platí, že je musíme explicitně deklarovat s klíčovým slovem Private, pokud nemají být veřejné.
Veřejné procedury, proměnné a konstanty, definované ve standardních modulech nebo modulech tříd, lze používat v odkazujících projektech. Nejdříve však musíme nastavit odkaz do projektu, kde jsou definovány.
Veřejné procedury, proměnné a konstanty, definované v jiných modulech, než jsou standardní moduly nebo moduly tříd, například v modulu formulářů nebo modulech sestav, nejsou dostupné odkazujícím projektům, protože tyto moduly jsou soukromými moduly projektu, v němž jsou uloženy.
Procedura typu Function (funkční procedura) je skupina příkazů zapsaná ve standardním modulu mezi příkazy Function a End Function. Tyto příkazy uvnitř funkce vykonávají určitou smysluplnou činnost, například zpracovávají text. Při volání funkce v programu zapíšeme do programového příkazu jméno funkce spolu s případnými potřebnými argumenty. Argumenty představují doplňující údaje, bez kterých funkce nemůže pracovat.
Každá funkce vrací do volající procedury určitou hodnotu a to prostřednictvím svého jména. Posledním příkazem funkce bývá z tohoto důvodu často přiřazovací příkaz, který do jména funkce přiřadí návratovou hodnotu.
[Public | Private] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Funkce] [statements] [name = expression] End Function
Public | |
Volitelná. Public procedura je přístupná pro všechny ostatní procedury ve všech modulech. Při použití v modulu, který obsahuje příkaz Option Private, není procedura dostupná mimo rámec projektu. |
|
Private | |
Volitelná. Private procedura Function je přístupná pouze pro ostatní procedury v modulu, ve kterém je deklarována. | |
Static | |
Volitelná. Lokální proměnné Static procedury Function zůstanou mezi jednotlivými voláními uchovány. Atribut Static nemá vliv na proměnné, které jsou deklarovány mimo proceduru Function, ani ne v případě, jsou-li touto procedurou používány. |
|
name | |
Povinná. Název procedury Function. | |
arglist | |
Volitelná. Seznam proměnných představujících argumenty, které jsou předávány proceduře Function při jejím volání. Proměnné jsou odděleny mezi sebou čárkou. | |
type | |
Volitelná. Datový typ hodnoty vrácené procedurou Function. Možné datové typy jsou Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (v současné době není podporován), Date, String (kromě řetězců s pevnou délkou), Object, Variant nebo libovolný uživatelský typ. Nemůže být vráceno pole žádného typu. Pro vracení polí je potřeba použít proměnnou typu Variant, obsahující pole, která může být vrácena. |
|
statements | |
Volitelná. Příkazy, které se vykonají v rámci procedury Function. | |
expression | |
Volitelná. Vrácená hodnota procedurou Function. |
' Následující uživatelem definovaná funkce vypočítá ' sinus úhlu zadaného ve stupních. Uhel je předán jako argument. Function SinusStupne(CisArg As Double) As Double CisArg = CisArg * (3.14 / 180) 'Prevod stupňů na radiány SinusStupne = Sin(CisArg) 'Vrácení vypočítaného sinu. End Function
Zavolání funkce se uskuteční následovně:
SinusStupne = SinusStupne(100)
Tento řádek kódu vypočítá sinus úhlu 100 stupňů a výsledek uloží do proměnné SinusStupne.
Procedura typu Sub (klasické procedury) se do značné míry podobá proceduře typu Function. Procedura Sub však do volajícího programu nevrací místo svého jména žádnou hodnotu.
Procedury typu Sub se používají například k načítání vstupu od uživatele, k zobrazení nebo tisku různých informací anebo k manipulaci s určitými vlastnostmi spojenými s nějakou podmínkou. Ve volání procedur se také zpracovávají různé proměnné a jako výsledky se může vrátit několik hodnot. Většina funkcí může vracet jen jednu hodnotu, klasické procedury typu Sub jich však mohou vracet i více.
Při volání procedury musíme zadat stejný počet a datový typ argumentů, jaký je uveden v deklaraci Sub. Jestliže procedura během své činnosti změní hodnotu některé z proměnných definovaných jako argument volání, vrátí se do programu upravená hodnota této proměnné. Procedury definované ve standardním modulu, jsou (podobně jako funkce) implicitně veřejné, takže se dají volat z libovolné procedury události.
[Public | Private] [Static] Sub name [(arglist)] [statements] [Exit Sub] [statements] End Sub
Public | |
Volitelná. Public procedura Sub je přístupná pro všechny ostatní procedury ve všech modulech. Při použití v modulu, který obsahuje příkaz Option Private, není procedura dostupná mimo rámec projektu. |
|
Private | |
Volitelná. Private procedura Sub je přístupná pouze pro ostatní procedury v modulu, ve kterém je deklarována. | |
Static | |
Volitelná. Lokální proměnné Static procedury Sub zůstanou mezi jednotlivými voláními uchovány. Atribut Static nemá vliv na proměnné, které jsou deklarovány mimo proceduru Sub, ani ne v případě, jsou-li touto procedurou používány. |
|
name | |
Povinná. Název procedury Sub. | |
Volitelná. Seznam proměnných představujících argumenty, které jsou předávány proceduře Sub při jejím volání. Proměnné jsou odděleny mezi sebou čárkou. | |
statements | |
Volitelná. Příkazy, které se vykonají v rámci procedury Sub. |
' Definice procedury Sub. ' Procedura Sub se třemi argumenty. Sub VypocetPlochyTrojuhelniku(OdvesnaA, OdvesnaB, Prepona) Dim Plocha As Double ' Deklarace místní proměnné. Dim S As Double ' Deklarace místní proměnné. If OdvesnaA = 0 Or OdvesnaB = 0 Or Prepona = 0 Then ' Je-li jeden z argumentů 0: Exit Sub ' Ukončení procedury Sub. End If S = (OdvesnaA + OdvesnaB + Prepona) / 2 Plocha = Sqr (S * (S - OdvesnaA) * _ (S - OdvesnaB) * (S - Prepona)) ' Výpočet plochy trojúhelníku. Debug.Print Plocha ' Vytisknutí obsahu proměnné ' Plocha do ladícího okna. End Sub
Zavolání funkce typu Sub, kdy argumenty jsou předány hodnotou, se uskuteční následovně:
VypocetPlochyTrojuhelniku 10 10 15
Volání procedury typu Sub hodnotou znamená, že argumenty jsou předány do procedury literálovou, přímo zapsanou, hodnotu, například řetězcem v uvozovkách. Tento mechanismus se využívá v případě, kdy hodnota je konstantní a procedura ji nemůže měnit.
Zavolání funkce typu Sub, argumenty jsou předány odkazem, se uskuteční následovně:
Dim Cislo As Integer Cislo = 10 VypocetPlochyTrojuhelniku Cislo Cislo Cislo
Volání procedury typu Sub odkazem znamená, že argumenty jsou předány do procedury jako proměnné. Tento mechanismus se využívá v případě, kdy procedura může modifikovat hodnotu argumentu a změněná hodnota se vrátí do volajícího programu.
V řadě případů potřebujeme volat proceduru s proměnnou, ale tak aby byla volaná hodnotou. Existují dva způsoby jak to zařídit:
Sub VypocetPlochyTrojuhelniku(ByVal OdvesnaA, _ ByVal OdvesnaB, ByVal Prepona)
VypocetPlochyTrojuhelniku (Cislo) (Cislo) (Cislo)
Procedury vlastností v programu vytvářejí uživatelem definované vlastnosti a dále s nimi manipulují. Tyto procedury patří sice mezi složitější, ale také velice užitečné součásti jazyka. Umožňují další přizpůsobení existujících ovládacích prvků Visual Basicu a rozšiřují jazyk Visual Basic o nové objekty, vlastnosti a metody.