OdporúčameZaložiť web alebo e-shop

VBA - Visual Basic for Applications

1 2 3 4 5

- programovací jazyk

- pokud něco chybí v MS Office, můžeme si to vytvořit

- je to součást Office (ne jen)

- otevřená platforma - také v Corel DRAW (vektor), Auto CAD

- makra - zautomatizované činnosti

- objektově orientované programování - objekt má - vlastnosti (properties) - jméno, velikost…

     - metody (methods) - to co umí

     - události (events) - kdy já myší najedu na okno, klik… -
        aby byla zrealizována nějaká metoda

- makra se spouštějí - Ctrl + E, J, M,  L, Q, T, Y

    - Ctrl + Shift + kromě A, F, O, P

- makro začíná a končí Sub

- symbol apostrofu - komentář

 

- Algoritmus -> (vývojoví diagram ! = grafické znázornění algoritmu) ->Programovací jazyk -> kód = program =
posloupnost instrukcí

- Programovací jazyk - nízko úrovňové - základné, strojové, Assembler (jsou bližší počítačům (HW úroveň))

     - vyšší program. jazyky - VB(A), C, C+, C++, C# (sharp), Java, PHP, Pascal, Fortram,
Python //paiton// …

- Programování - imperativní (příkazové) = procedurální - data jdou na vstup (1) procedury ta je zkracuje
(formou příkazů) a dostanu 1 výstup

       - objektově orientované programování - používá objekty které mohou mít více vstupů a
        výstupů a které zdržují data a funkce v jeden celek

- Algoritmus - je přesný postup kterým řešíme určitý jednoznačně definovaný problém (úlohu)

  - musí být: 1. konečný (musí mít začátek a konec) (problém nekonečného zacyklení)

2. jednoznačný - v každém kroku musí být jasné jaký je další krok

3. věcně správný - chyba v zápisu

4. obecný

5. opakovatelný - deterministický - při stejných vstupech musí být vždy stejný výstup

6. srozumitelný* - rozumí mu nejen autor ale i ostatní -> použití normalizovaných
                            způsobů zápisu a komentářů

  - grafické znázornění algoritmu = vývojový diagram

 

 

- UDF - Uživatelsky definované fce - 1. vytvořit modul - 2. tlačítko

        - 2. musí začínat - Function a končit - End function

 

 

Function ObvodObdelnika(Sirka, Vyska)

ObvodObdelnika = 2 * (Sirka + Vyska)

End Function

       - FCE vrací výsledek do buňky

- Makra - dají se nahrát

    - nahrávaní

    - editace

    - dopisování

 

- Proměnná - je to pojmenovaný prostor v paměti

 - proměnné jsou datového typu - Integer - celé číslo - číslový

     - Byte - 1B - číslový/datový

     - Single - reálné číslo,, desetinná čísla s tečkou !!! - číslový

     - String - znakový řetězec - datový typ - vše v ""  - když je to číslo tak
                  už se nedá počítat!! - např. PSČ

     - Bolean - ano/ne  - logický

     - Variant - vše - všechny data, zabírá nejvíc v paměti

     - Date - datový typ čistě pro datum

- deklarace proměnné - DIM Pocet As Integer

         - DIM Slovo As String

         - DIM Znamka As Byte

        - Function ObjemKrychle (Strana As Single As Single)

        - Function ZnamkaSlovne (Znamka As Byte As String)

 

 

Pravidla pro psaní kódu VBA, PROMĚNNÉ,
V
ÝRAZY

 

  • Klíčová slova Sub …End Sub; Function….End Function

 

          Odsazování

 

  • Pište malými písmeny

 

  • Názvy proměnných - maďarská notace

 

  • Příznak pokračovacího řádku _

 

  • Datové typy pro VBA

 

image

 

PROMĚNNÉ A PRÁCE S NIMI

 

Proměnné slouží k uložení dočasných, proměnlivých hodnot, které vznikají při běhu procedury

 

DEKLARACE PROMĚNNÉ

  • slouží k pojmenování proměnné a určení jejího typu

- měla by být provedena dříve, než je proměnná poprvé použita explicitní deklarace proto
deklaraci proměnných standardně umisťujeme na začátek procedury.

POZN: Pokud v kódu použijeme proměnnou, která není deklarována, přiřadí ji VBA typ podle
hodnoty, kterou do ní vložíme
implicitní deklarace.

- název musí začínat písmenem, max. 255 znaků, nesmí to být některé z klíčových slov
(název příkazu…) a nesmí obsahovat mezeru nebo znaky @ # $ ! . % & . Nezáleží na velikosti znaků.

Deklaraci provedeme příkazem DIM (Dimension)

Př.:    Dim A As Integer

Dim iSoučet As Integer

Dim Součet#

 

 

VÝRAZY

  • provádějí operace a poskytují výsledky
  • jsou tvořeny:
    • Operandy: proměnné, konstanty, literály (= čísla a znakové řetězce ty se
      p
      íšou v uvozovkách)
    • Operátory: symboly, které určují jaké operace se budou provádět s operandy

Operátor přiřazení: =

Aritmetické operátory: +

-

*

/

\ celočíselné dělení (Alt 92)

^ mocnění (Alt 94)

Mod modulo – zbytek po celočíselném dělení

Operátor řetězení: & (Alt 38)

Operátory porovnání: =

> (Alt 62)

< (Alt 60)

>=

<=

<>

Like  - shoduje se s ( je možno používat * konv.)

Is - slouží pro porovnání dvou objektů

Logické operátory: And

Or

Eqv

Imp

Xor

Not

  • Funkcemi: VBA disponuje řadou zabudovaných funkcí, často odpovídají funkcím Excelu, zadávají se však v angl. formě  - využij Nápovědy:
    Matematické funkce:
    Finanční funkce:
    Řetězcové funkce:
    Funkce data a času:
    Součástí výrazu mohou být samozřejmě i uživatelsky definované fce
  • Závorkami: - mění pořadí provádění operací
    - závorky si musí odpovídat
    stejný počet levých a pravých závorek ve výrazu, jinak
    se vypíše chybové hlášení Expected: )

 

! Operandy musí být kompatibilních datových typů. (Nelze kombinovat např. Integer a String)

! Operátory musí odpovídat datovému typu operandu (Nelze násobit dva textové řetězce String)

! Datový typ proměnné, do které ukládám výsledek, musí odpovídat datovému typu výsledku,
který obdržím:

Dim A as Integer, B as Integer, C as Single

B = 1

C = 1,5

A = B * C    Výsledek bude 2! Zdroj špatně odstranitelných chyb nejsme varováni
                        žádným hlášením

 

 

ÍKAZ MSGBOX & INPUTBOX

 

 

MsgBox – umožňuje zobrazení zprávy v dialogovém okně

 

 

Syntaxe:    MsgBox výzva, tlačítka, titulek

 

výzva – znakový řetězec v uvozovkách, nebo proměnná typu string

tlačítka – parametr definující tlačítka, pokud jej neuvedu -> bude zobrazeno jen tlačítko OK

titulek  – znakový řetězec v uvozovkách, nebo proměnná typu string; zobrazuje se v záhlaví dialog. okna, pokud jej neuvedu -> zobrazí se název aktuální aplikace (Word, Excel...)

 

Příklad: podívejte se v tomto wordovském dokumentu na makro DialogMsgBox a spusť je.

 

Sub DialogMsgBox()

MsgBox "Toto je text v parametru VÝZVA", , "Můj titulek"

End Sub

 

 Sqr - odmocnina

 

 

InputBox – umožňuje zobrazit okno, které slouží k zadání vstupních hodnot procedury, nebo funkce

 

Syntaxe:    InputBox(výzva, titulek)

 

výzva – znakový řetězec v uvozovkách, nebo proměnná typu string

titulek  – znakový řetězec v uvozovkách, nebo proměnná typu string; zobrazuje se v záhlaví dialog.
                okna, pokud jej neuvedu -> zobrazí se název aktuální aplikace (Word, Excel...)

 

Příklad: podívejte se v tomto wordovském dokumentu na makro ZadejČíslo a spusť je.

 

Sub ZadejČíslo()

Dim Číslo As Integer

Číslo = InputBox("Zadejte, prosím, libovolné přirozené číslo", "Můj titulek pro InputBox")

MsgBox "Vámi zadané číslo je rovno" & Číslo, , "Můj titulek pro MsgBox"

End Sub

 

Použít relativní odkazy - používá relativní odkazy od míst kde jsme je spustili

 

SMYČKY A CYKLY

Modulární programování delší programový kód je členěn na jednotlivé procedury a funkce,
které vytvoříme pouze jednou a v případě potřeby je můžeme volat a spouštět kolikrát bude zapotřebí.
Šetříme čas při psaní kódu a je to výhodné i při změnách a úpravách kódu.

 

(Pozn.: Pokud bych psal kód za sebou, i několikanásobně opakovně, pak bude dlouhý, hůře
čitelný a upravovatelný, ale rychlejší než kód vytvořený formou modulárního programování!)

 

 

Struktura DO … LOOP

Používá se v případech kdy neznáme přesný počet opakování cyklu.

Čtyři možné tvary syntaxe:

 

A)    Do While podmínka

[příkazy]

Loop

 

!Podmínka je vyhodnocována před vstupem do smyčky a příkazy jsou provedeny jen pokud
je podmínka True!

 

B)    Do

[příkazy]

Loop While podmínka

 

!Podmínka je vyhodnocována na konci smyčky a pokud je True pak se provedou příkazy!

 

C)    Do Untile podmínka

[příkazy]

Loop

 

!Podmínka je vyhodnocována před vstupem do smyčky a příkazy jsou provedeny, jen pokud
je podmínka False!

 

D)    Do

[příkazy]

Loop Untile podmínka

 

!Podmínka je vyhodnocována na konci smyčky a pokud je False pak se znovu provedou příkazy!

 

 

Struktura FOR … NEXT

Používá se v případech kdy známe přesný počet opakování cyklu.

 

For čítač = start To konec [Step přírůstek]

[příkazy]

Next [čítač]

 

Čítač – číselná proměnná použitá jako počitadlo průchodů smyčkou (v praxi často písmena I až N)

start – počáteční hodnota čítače, většinou = 1, může to být i číselný výraz

konec – Konečná hodnota čítače pro kterou jsou příkazy ještě provedeny

přírůstek – volitelná hodnota, pokud není uvedena = 1, může to být i číselný výraz, může být záporná!

 

!Konec nesmí být menší než start (v případě kladného přírůstku)! Konec nesmí být větší než start
(v případě záporného přírůstku)! Pokud tomu tak je - cyklus se přeskočí!

!Je-li konec = start provede se cyklus jedenkrát!

Pro rychlejší provádění cyklu je vhodné neuvádět za příkazem Next název proměnné čítače.

 

Příkaz EXIT DO, Příkaz EXIT FOR

Používají se pro předčasné ukončení cyklu; dříve než by odpovídalo normálnímu průběhu.

Program pak pokračuje příkazy za klíčovými slovy Loop (While, Untile) resp. Next.

 

 

 

Funkce VBA, o kterých bych měl vědět:

Trim(řetězec) – zbaví znakový řetězec všech znaků mezera před a za znakovým řetězcem

Len(řetězec)    - vrací číslo = počet znaků znakového řetězce retezec

Mid(řetězec,startznak,početznaků) – vrací znakový řetězec: tolik znaků kolik je početznaků ze znakového
řetězce řetězec počínaje znakem který je v pořadí startznak

(Alternativy: Left(řetězec, délka); Right(řetězec, délka)

IsNumeric(výraz) – logická funkce => vrací pravdu x nepravdu (True x False) v závislosti na tom zda výraz
je či není číslo

IsDate(výraz)

IsEmpty(výraz)

IsNull(výraz)

! The Null value indicates that the Variant contains no valid data. Null is not the same as Empty, which indicates that
a variable has not yet been initialized. It is also not the same as a zero-length string (""), which is sometimes referred
to as a null string
!

 

 

Chci-li jednoduše volat nápovědu k nějaké funkci, pak zapíšu její název do vyhledávacího pole nápovědy
> ve výsledcích hledání použiju odkaz na článek (article) týkající se mé funkce.

Neznám-li přesný název funkce, pak zapíšu do vyhledávacího pole nápovědy klíčové slovo functions.

Tip: Chci-li zobrazit přehled funkcí dostupných ve VBA, pak do vyhledávacího pole zapíšu název libovolné
mně známé funkce a v článku týkajícího se mé funkce použiju v horní drobečkové navigační liště odkaz Functions.

 

 

VBA - Práce s oblastmi v Excelu

Označení oblasti:

Pokud nahrávám makro, používá VBA metodu (metoda = …) Range se syntaxí, kde oblast buněk je zapsána
jako text:    Range("E4:H9").Select        (pro jednu buňku: Range("E4").Select)

 

Pozn! Pokud bych chtěl pro označení oblasti použít proměnné, musel bych postupovat třeba takto:

Dim LevyHorni As String, PravyDolni As String, Oblast As String

LevyHorni = InputBox("Zadej adresu levého horního rohu")

PravyDolni = InputBox("Zadej adresu pravého dolního rohu")

Oblast = LevyHorni & ":" & PravyDolni

Range(Oblast).Select

 

Při ručním psaní kódu je asi výhodnější použít jinou možnou syntaxi:    Range("E4", "H9").Select

  • V tomto případě metoda Range pracuje se dvěma argumenty oddělenými čárkou                   
             (pro jednu buňku: Range(
    "E4", "E4").Select)

 

Pozn! Předcházející kód by pak vypadal následovně:

Dim LevyHorni As String, PravyDolni As String

LevyHorni = InputBox("Zadej adresu levého horního rohu")

PravyDolni = InputBox("Zadej adresu pravého dolního rohu")

Range(LevyHorni, PravyDolni).Select

 

Příklad: Napište proceduru, která si od uživatele vyžádá souřadnice oblasti a vyplní ji obsahem,
který si také vyžádá od uživatele.

Sub Vypln()

Dim LevyHorni As String, PravyDolni As String, Obsah As String

LevyHorni = InputBox("Zadej adresu kde mám začít")

PravyDolni = InputBox("Zadej adresu kde mám skončit")

Obsah = InputBox("Zadej čím mám plnit")

Range(LevyHorni, PravyDolni).Value = Obsah

End Sub

V tomto příkladě je použita vlastnost Value objektu Range, pomocí které je do každé buňky oblasti
zapsána hodnota uložená v proměnné Obsah.

 

Úkoly:

Zjistěte (pomocí nahrávky makra) jaký kód používá VBA pro:

  •  generování datové řady (posloupnosti)
  • kopírování (vyjmutí) a vložení oblasti dat
  • vymazání oblasti dat
  • odstranění sloupce, řádku

 

 

Tipy:

Označená oblast se označuje jako objekt Selection

Odstranění formátování v označené oblasti:    Selection.ClearFormats

 

Objekt aktivní buňka:    ActiveCell

Vlastnosti:    ActiveCell.FormulaR1C1 = "1"

ActiveCell.Value = "1"

ActiveCell.Offset(1, 2).Select        - znamená posun o 1 řádek dolů a 2 sloupce doprava

ActiveCell.EntireRow.Select        - znamená výběr celého řádku, v kterém je aktivní buňka

ActiveCell.EntireColumn.Select        - znamená výběr celého sloupce, v kterém je aktiv. buňka

ActiveCell.EntireColumn.Clear        - výmaz veškerého obsahu sloupce

ActiveCell.EntireColumn.Delete        - odstranění sloupce

 

DU: vytvořte makro VBA s názvem 100krát ktoré si vyzžáda od uživatele vstupmní hodnotu
(string) a touto vstupní hodnotou vyplní akttivní bunku a dalsších 99 buněk směre dolů. CTRL + Q

 

 

Sub stokrat()

'

' stokrat Makro

'

' Klávesová skratka: Ctrl+q

'

 

Dim Hodnota As String

 

        Hodnota = InputBox("Zadaj hodnotu", "Hodnota")

                  MsgBox "Vami zadaná hodnota je: " & Hodnota, , "Informacia"

           

            For sprav = 1 To 100

                ActiveCell.FormulaR1C1 = Hodnota

                ActiveCell.Offset(1, 0).Select

            Next

 

        MsgBox "Koniec"

       

End Sub

 

 

V rámci cyklu For Each

 

 

Normal.dot/dotm - základní stavba wordu - výchozí šablona