Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
... neplýtvejte zbytečně místem ...
Při psaní maker je vhodné v úvodu deklarovat proměnné. Sice VBA funguje bez tohoto deklarování, ale zbytečně alokuje pro proměnou větší prostor než je potřeba. Pro malé skripty to nevadí, ale u složitějších programů se bez deklaraci neobejdeme. Jinak si spomalíme výpočet.
... jasně a výstižně bez diakritiky ...
Název musí být vystižný. Tak aby bylo jasné o jaký parametr jde.
Doporučuji používat názvy proměnných bez diakritiky. Každé slovo začínat velkým písmenem. V názvu proměnné označit její typ.
Výhody oceníte při hledání chyb, či doplňování skriptu po půl roce.
Kromě deklarace správného typu je potřeba deklarovat platnost.
Než to složitě vysvětlovat v čem se proměnné liší uvedu příklda dvou kódu. Pokud si je spustíte bude Vám to jasné:
Sub PlatnostPromenne1()
Dim HodnotaLg1 As Long
HodnotaLg = HodnotaLg + 1
MsgBox "HodnotaLg = " & HodnotaLg
End Sub
Sub PlatnostPromenne2()
Static HodnotaLg As Long
HodnotaLg = HodnotaLg + 1
MsgBox "HodnotaLg = " & HodnotaLg
End Sub
Pokud několikrát spustíte první kód bude HodnotaLg stále rovná jedné, ale u druhého kódu se bude hodnota HodnotaLg postupně zvyšovat.
Takže ač se proměnná HodnotaLg jmenuje v obou procedurách stejně jde o různou proměnnou. Procedury můžete spouštět na sřídačku.
Trochu si to zamotáme.
Takže teď použijeme proměnnou společnou pro modul
Dim ModHodnotaLg As Long
Sub PlatnostPromenne11()
ModHodnotaLg = ModHodnotaLg + 1
MsgBox "ModHodnotaLg = " & ModHodnotaLg
End Sub
Sub PlatnostPromenne12()
ModHodnotaLg = ModHodnotaLg + 10
MsgBox "ModHodnotaLg = " & ModHodnotaLg
End Sub
Teď už se bude ModHodnotaLg zvyšovat o jedna nebo deset v závislosti který příklad spustíte.
Uvidí ji procedury ve všech modulech.
Public PubHodnotaLg As Long
Sub PlatnostPromenne31()
PubHodnotaLg = PubHodnotaLg + 1
MsgBox "PubHodnotaLg = " & PubHodnotaLg
End Sub
Předpokládám, že příklady objasnily jak platnost proměnné funguje.
Pozor důsledně deklarovat názvy. Protože proměnná v proceduře má vyšší prioritu než ta modulová. Aby při předávání nedošlo k problémum. Z osobní zkušenosti vím, že tato chyba se hledá velice dlouho...
Pozor při deklaraci. ať není jiná deklarace než myslíte..
Dim a, b As Integer
a není typu Integer jak možná myslíte, ale je typu Variant, protože jeho typ nebyl deklarován, b je typu Integer. Správně je následující:
Dim a As Integer, b As Integer
Jak jsem již psal ač Excel umí přiřazovat datum typ automaticky. Nevýhodou je horší využití paměti. Takže představím datové typy jež jsou v Excelu:
Datové typy | Počet bajtů | Rozsah hodnot |
---|---|---|
Boolean | 2 bajty | TRUE/FALSE |
Byte | 1 bajt | 0 – 255 |
Integer | 2 bajty | –32.768 – 32.767 |
Long | 4 bajty | – 2.147.483.648 – 2.147.483.647 |
Single | 4 bajty | |
Double | 8 bajtů | |
Currency | 8 bajtů | |
Decimal | 14 bajtů | |
Date | 8 bajtů | 1.leden 0100 – 31.prosinec 9999 |
Object | 4 bajty | Odkaz |
String (proměnná délka) | 10 bajtů + délka řetězce | 0 – 2miliardy |
String (pevná délka) | délka řetězce | 1 až 65000 |
Variant (s čísly) | 16 bajtů | |
Variant (se znaky) | 22 bajtů + délka řetězce | 0 – 2miliardy |
Obsahuje hodnotu TRUE nebo FALSE. Jako výsledek rozhodovacích procesu, nebo návratová hodnota některých funkcí. Jde o logickou hodnotu (1,0), (PRAVDA,NEPRAVDA.
IF Boolean THEN
MsgBox "je TRUE"
ELSE
MsgBox "je FALSE"
END IF
Proměnné typu Boolean se ukládaji jako 16-bitová (2-bajtová) čísla, ale mohou nabývat pouze hodnot True nebo False.
Proměnné typu Boolean se zobrazují buď jako True nebo False (je-li použit příkaz Print), Použitím klíčových slov True a False se proměnným typu Boolean přiřazuje jeden z těchto stavů.
Jsou-li převáděny jiné číselné typy na typ Boolean, převede se 0 na False a všechny ostatní hodnoty se převedou na True. Jsou-li převáděny hodnoty typu Boolean na jiné datové typy, převede se False na hodnotu 0 a True na hodnotu -1.
Byte se ukládá jako 8-bitová (1-bajtové) číslo bez znamínka, hodnoty jsou v rozsahu od 0 do 255.
Vhodný pro ukládání binárních dat.
Proměnné typu Currency jsou uloženy jako 64-bitová (8-bajtová) čísla, která jsou zvětšena 10.000 krát. Takže máme 15 číslic nalevo a 4 číslic napravo od desetinné čárky. Znázorněníme čísela v rozsahu od -922.337.203.685.477,5808 do 922.337.203.685.477,5807.
Typ Currency je vhdný pro finanční výpočty.
Date se ukládá jako 64-bitová (8-bajtová) čísla s pohyblivou desetinnou čárkou. Znázorňuje datum od 1. ledna 100 do 31. prosince 9999 a čas od 0:00:00 do 23:59:59.
Proměnné typu Date zobrazují datumy dle lokálního nastavení v PC. Čas se zobrazuje buď v 12-hodinovém nebo 24-hodinovém taktu.
Jestliže jsou jiné datové typy převáděny na typ Date, potom nalevo od desetinné čárky je datum a napravo od desetinné čas. Půlnoc je 0,0 a poledne hodnotou 0,5.
Proměnné typu Decimal se ukládají jako 96-bitova (12-bajtová) celá čísla (bez znaménka). Čísla jsou zvětšená proměnlivou mocninou čísla 10, která představuje zvětšovací faktor (určuje počet číslic napravo od desetinné čárky v rozmezí od 0 do 28). Nula = žádná desetinná místa. Rozsah je tedy od +/- 79 228 162 514 264 337 593 543 950 335. Pro 28 desetinných míst je rozsah +/-7,9228162514264337593543950335. nejmenší hodnota je +/-0,0000000000000000000000000001.
Poznámka: V současnosti může být datový typ použit pouze v rámci typu Variant, Tj .vytvořit proměnnou typu Variant, která obsahuje podtyp Decimal, a to použitím funkce CDec.
Proměnné typu Double se ukládají jako 64-bitová (8-bajtová) čísla s pohyblivou desetinnou čárkou (standard IEEE) v rozsahu od -1,79769313486232E308 do -4,94065645841247E-324 pro záporná čísla. Od 4,94065645841247E-324 do 1,79769313486232E308 pro kladná čísla.
Proměnné typu Integer se ukládají jako 16-bitová (2-bajtová) čísla v rozsahu hodnot od -32 768 do 32 767.
Proměnná typu Integer se používá pro vyjádření výčtových typů.
Proměnná typu Long (dlouhé celé číslo) se ukládá jako 32-bitové (4-bajtové) číslo se znaménkem. Je od - 2 147 483 648 do 2 147 483 647.
Proměnná typu Object se ukládá jako 32-bitová (4-bajtové) adresy odkazující na objekty.
Proměnná typu Single (s pohyblivou desetinnou čárkou s jednoduchou přesností). Ukládá promměné jako 32-bitová (4-bajtová) čísla s pohyblivou desetinnou čárkou. Rozsahu od -3,402823E38 do -1,401298E-45 pro záporná čísla a od 1,401298E-45 do 3,402823E38 pro kladná čísla.
Existují dva druhy řetězců:
Poznámka: Řetězec s pevnou délkou typu Public nemůže být použit v modulu třídy.
Kódy znaků pro typ String se nacházejí v rozsahu od 0 do 255. Prvních 128 znaků (0–127) znakové sady odpovídá písmenům a symbolům na standardní americké klávesnice (US). Druhá skupina 128 znaků (128–255) obsahuje zvláštní znaky, jako písmena jiných národních abeced, interpunkční znaménka, měnové symboly a zlomky.
Datový typ Variant je datový typ pro všechny proměnné výslovně nedeklarované jako některý předchozí datový typ.
Typ Variant je zvláštní datový typ, který může obsahovat libovolný druh dat (kromě String s pevnou délkou a uživatelských typů). Navíc může typ Variant obsahovat zvláštní hodnoty Empty, Error, Nothing a Null.
Číselná data mohou být libovolné celé nebo reálné číslo v rozsahu od -1,797693134862315E308 do -4,94066E-324 pro záporné hodnoty a od 4,94066E-324 do 1,797693134862315E308 pro kladné hodnoty.
Proměnná Variant může také obsahovat zvláštní hodnotu Error, která indikuje, že v proceduře. došlo k chybové situaci. Která se dá dále zpracovat.
Libovolný datový typ vámi definovaný pomocí příkazu Type.
Další ukázky v přípravě. Konstanty, nepovolené znaky....
Článek byl aktualizován: 19.09.2020 11:07
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 22.04.12 15:36
Co jsou to přesně strukturované datové typy?
Přidáno: 22.04.12 18:02
To Sanet: Strukturované datové typy jsou skupiny jednodušších typů. Např. strukturovaný datový typ datum se členy den, mesic a rok. Strukturovaný typ osoba se členy jméno, přijmení titul, datum narození.
Přidáno: 24.04.12 12:53
Děkuji za odpověď
Přidáno: 20.06.12 13:26
Dobrý den, prosím poraďte jak vložit aktuální datum do jména souboru např. ve formátu:RRMMDD. Jde mi o generování PDF souboru: Sub TiskDoPdfFaktura() Sheets("Faktura").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\MyDokuments\RRMMDD_Soubor.pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub Děkuji moc.
Přidáno: 08.11.12 10:41
Dobrý den, jakým způsobem mohu předat proměnnou, deklarovanou VBA kodem z programu microsoft office(excel, access) do políčka stránky html, aby se tato stránka rovnou načetla. Mám zadanou adresu http metodou navigate, ale potřebuji ještě vložit text do políčka formuláře, aby se stránka rovnou načetla v tomto zadání. Děkuji za odpověď, S.
Přidáno: 04.10.13 10:25
Zdravim, Uz si opravdu nevim rady, pomoc! Mam deklarovanou promennou 'nazev' A tuto promennou potrebuji vyfiltrovat ne beznym zpusobem, ale bunka-obsahuje Tzn potrebuji aby tohke fungovalo: ActiveSheet.ListObjects("data").Range.Autofilter 4, *nazev* , xlAnd Jak to napsat?
Přidáno: 08.11.13 15:36
Pro Petra format(date,"yymmdd")
Přidáno: 17.02.14 13:49
@Rosta: Zkusil bych ActiveSheet.ListObjects("data").Range.Autofilter Field:=4, Criteria1:="=*nazev*", xlAnd
Přidáno: 22.07.14 13:40
... nenasiel som to tu mozete vysvetlit co presne znamena : "option explicit" pokial je a niej tento prikaz v zosite (na zaciatku sriptu) Ďakujem
Přidáno: 15.10.14 11:34
Marianus - Option explicit vynucuje deklaraci všech promennych. Bez jeho pouziti je promennym, které nejsou deklarovany, prirazen datovy typ variant, který se při pouziti muze menit. Při pouziti option explicit musí byt všechny promenne deklarovany prirazenim datového typu.
Přidáno: 23.10.14 00:32
Dobry den, z jineho vaseho vyborneho clanku jsem si opsala makro, ktere by melo resit muj problem, nicmene mi nefunguje. Pise mi to chybu "argument not valid". Muzete mi prosim poradit? Makro: Sub() rwLast=Range("B"&Rows.Count).End(xlUp).Row+1 Range("B"&rwLast&":G"&rwLast). Value=Application.Transpose(Range("list!Q5:list!W5")) End Sub Melo by to kopirovat vysledky z jednoho radku tabulky do jine, vzdy pod sebe po kazdem spusteni makra. Muze by problem v tom, ze kopirovane/zdrojove bunky obsahuji funkci Napr.v bunce "list!Q5" je zadano: =C4. Diky za pomoc!!
Přidáno: 28.10.14 08:33
To Karla: -- Sub Test()
rwLast = Range("B" & Rows.Count).End(xlUp).Row + 1
Temp = Sheets("List2").Range("Q5:W5")
Sheets("List1").Range("B" & rwLast & ":H" & rwLast).Value = Temp
End Sub
Přidáno: 28.10.14 13:07
To Karla: -- (pokračovanie) ...stačí takto(POZOR zmenil som aj počet prenesených stĺpcov na rovnaký počet pocZdroj=pocCiel):
rwLast = Sheets("List1").Range("B" & Rows.Count).End(xlUp).Row + 1
Sheets("List1").Range("B" & rwLast & ":H" & rwLast).Value = Sheets("List2").Range("Q5:W5").Value
ALEBO colPoc = 7 ' počet prenesených stĺpcov (Zdroj = Ciel)
rwLast = Sheets("List1").Range("B" & Rows.Count).End(xlUp).Row + 1
Sheets("List1").Cells(rwLast, "B").Resize(, colPoc).Value = _
Sheets("List2").Cells(5, "Q").Resize(, colPoc).Value
Přidáno: 28.10.14 19:07
To Jojo: Diky moc za radu a rychlou reakci. Trosku jsem si s tim musela pohrat ale uz to jede a dela to co chci ! Jeste jednou diky !!
Přidáno: 01.12.14 11:15
fakt super 8===0 {()}
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |