Články > Plávajúce okno

Plávajúci formulár VBA

Nejde o žiadny divný objekt. Je to bežný formulár VBA, ktorý je zobrazený v popredí dokumentu v režime Modeless. To znamená, že je možné normálne pracovať s týmto dokumentom aj počas zobrazenia tohto formulára.

UPOZORNENIE - režim "plávajúceho" formulára funguje vo verzii Office 2007 a vyššej. V starších verziách bude tento formulár VBA vždy navrchu, bez možnosti práce s hárkom, až kým nebude tento formulár zatvorený.

A význam takého riešenia? Napríklad potrebujeme sledovať vybrané hodnoty zobrazené vo formulári, aj keď sa presúvame medzi hárkami v Exceli. Predpokladám, že máte nejaké znalosti tvorby formulárov v editore Visual Basic. Nie je to nič zložité. Ak si neviete rady, kľudne mi napíšte.

Vytvoríme teda nový formulár ako na obrázku a zmeníme názov na frmPlavajuciForm. Takisto zmysluplne pomenujeme aj ostatné ovládacie prvky formulára. Napríklad textový popisok label s pôvodným názvom Label1 premenujeme na labCena. Toto odporúčam dodržiavať aj pri ovládacích prvkoch umiestnených v hárku. Ako inak :)

obrázok formulára vba

Následne otvoríme okno pre zápis kódu do formulára. Takto - v okne zoznamu položiek projektu VBAProject klikneme pravým tlačítkom myši na názov formulára. Vyberieme položku View Code.

 položky projektu VBA

DEKLARÁCIA PUBLIC SUB

Do otvoreného okna zapíšeme následovný kód ako na obrázku nižšie. Dôležité je nastaviť metóde verejný prístup, čo zabezpečí príkaz Public Sub (v červenom rámiku). Dôvod je ten, že budeme volať túto metódu vždy po vykonaní zmeny v hárku. Metóda preto musí byť prístupná verejne.

obrázok kódu VBA Initialize

Logika kódu je jednoduchá. Spočíva v tom, že do jednotlivých textových labelov vypisujeme naše vybrané hodnoty z hárka Predaj. Pre hmotnosť a cenu iba vytiahneme hodnotu priamo z pomenovanej bunky. Pre hodnotu počet položiek je použitá VBA funkcia COUNTIF.

UDALOSŤ WORKSHEET CHANGE

Aktualizáciu hodnôt zobrazovaných vo formulári ošetríme udalosťou Worksheet Change. Táto udalosť sleduje akékoľvek zmeny na úrovni hárka. Takže pri zmene hodnoty v bunke sa vyvolá práve táto akcia. A túto využijeme pre aktualizáciu nášho plávajúceho formulára. Ako?

V okne Project Explorer dvojklikom na názov vybraného hárka otvoríme okno kódu VBA. Hore v ponuke okna vyberieme objekt Worksheet a udalosť Change. Do vygenerovaného kódu napíšeme zavolanie metódy formulára frmPlavajuciForm.UserForm_Initialize. To isté volanie metódy vložíme do kódu všetkých hárkov, ktorých zmeny hodnôt ovplyvňujú sledované údaje vo formulári.

obrázok kódu hárka

To je všetko. Do hárkov už len stačí pridať tlačítko a priradiť mu VBA makro, ktoré zobrazí tento formulár. Akékoľvek zmeny v tabuľke predaja, alebo ceny za tovar budú zobrazené a vždy viditeľné v našom formulári, aj keď prepíname medzi hárkami.

obrázok tabuľky predaja výsledný plávajúci formulár VBA

REŽIM MODAL A MODELESS

V úvode som spomínal, že táto možnosť "plávania" je možná iba od verzie Office 2007 a vyššej. Kvôli tomu je v makre pre zobrazenie formulára pridaná funkcia, ktorá kontroluje verziu nainštalovaných Office. Podľa čísla verzie tak zobrazí formulár v režime nemodálnom MODELESS (plávajúcom), alebo vždy hore MODAL. Inak by v staršej verzii Office skončil pokus o zobrazenie formulára chybou a zaseknutím makra.