Proměnné ve VBA
Proměnné VBA
Základní informace
Obecně proměnné slouží k uložení hodnot nebo objektů do paměti počítače, odkud mohou být v průběhu algoritmu volány. Příkladem může být uložení hodnoty A do proměnné A a hodnoty B do proměnné B a jejich následné využití pro početní a další úkony.
Sub UseVariables()
' Uložení hodnoty A do proměnné A
variableA = 10
' Uložení hodnoty B do proměnné B
variableB = 20
' Využití proměnných v početních operacích
MsgBox variableA + variableB ' 30
MsgBox variableA - variableB ' -10
MsgBox variableA * variableB ' 200
MsgBox variableA / variableB ' 0.5
End Sub
Výhody využívání proměnných
- Opakované využití bez nutnosti opětovného zápisu hodnoty
- Snadné nastavení hodnoty ve všech instancích proměnné, kdy stačí hodnotu nastavit v rámci první instance
- Snadná kontrola datových typů
- Optimalizace kódu a zvýšení jeho přehlednosti
Proměnné se deklarují (zakládají). Mohou být deklarovány v rámci procedury nebo v rámci celého projektu (souboru). Základní rozdíl je v tom, zda potřebujeme proměnnou použít pouze v rámci procedury, kde byla deklarována, nebo ve více procedurách, případně modulech. Proměnná deklarovaná uvnitř procedury, zaniká se skončením procedury, zatímco proměnná deklarovaná vně procedury si uchová hodnotu, dokud neukončíme práci na projektu.
Platnost proměnných
Platnost | Jak deklarovat proměnnou s touto platností |
---|---|
Samostatná procedura | Dim, Static, Const uvnitř procedury. |
Samostatný modul | Dim, Private na začátku modulu |
Všechny moduly | Public na začátku modulu |
Proměnné uvnitř procedury
Obecný zápis: Dim | Static | Const proměnná As Typ
Existují tři typy proměnných, které mohou být deklarovány uvnitř procedury, a to:
- Dim proměnná se používá pro deklarování uvnitř procedury a je uvozena klíčovým slovem Dim (dimenzovat). Těmto proměnným lze kdykoliv v průběhu procedury přiřadit nebo změnit hodnotu. Proměnná zaniká s ukončením procedury.
- Const proměnná představuje konstantu, jejíž hodnota je v průběhu procedury neměnná a definujeme ji přímo v deklarační části.
- Static proměnná si oproti předchozím dvěma uchová hodnotu i po skončení procedury.
Možnosti deklarování uvnitř procedury
Sub ProceduralVariables()
' Deklarace proměnných
Dim variableA As String
Const variableB As String = "Konstanta"
Static variableC As String
' Předání hodnoty proměnné
' Proměnné A je řádně předána hodnota
' Proměnní zanikne se skončením procedury
variableA = "Text 1"
' Konstantě B nelze přiřadit nebo změnit hodnotu mimo deklaraci
' Tento řádek skončí chybou
variableB = "Text 2"
' Proměnné C je řádně předána hodnota
' Tato proměnná uchová hodnotu i po skončení procedury
variableC = "Text 3"
End Sub
Proměnná platná v rámci celého modulu nebo projektu
Obecný zápis: Public | Private | Dim [Const] proměnná As Typ
Deklarování proměnné, platné v rámci celého modulu, se provádí v jeho deklarační části, která je vždy na začátku. Proměnné se uvozují klíčovými slovy Private (Dim) nebo Public (dříve se také používalo Global).
- Private (Dim) proměnné mají platnost pouze v rámci procedury, ve které jsou deklarovány.
- Public proměnné mají platnost v rámci celého projektu. Díky tomu mohu být použity i v jiných modulech a jejich procedurách.
U proměnných deklarovaných v rámci celého modulu je možné, stejně jako u procedurálních proměnných, deklarovat konstantu, a to opět klíčovým slovem Const.
Možnosti deklarování vně procedury
Public variableA As String
Private variableB As String
Public Const variableC As String = "Veřejná konstanta"
Private Const variableD As String = "Privátní konstanta"
Typování proměnných
Každá proměnná je určitého typu a my bychom jej měli u deklarace zvolit. Pokud bychom proměnné netypovali, tak by jim byl automaticky přiřazen typ Variant, který je velikostně nejnáročnější. Typováním proměnných také předcházíme chybnému přiřazení hodnoty do proměnné.
Seznam typů proměnných
Datový typ proměnné | Byty | Rozsah proměnné | Klasická deklarace | Zkrácená deklarace |
---|---|---|---|---|
Boolean | 2 | True nebo False (PRAVDA nebo NEPRAVDA) | Dim bVariable as Boolean | |
Integer | 2 | -32 768 až 32 767 | Dim iVariable as Integer | Dim iVariable% |
Long | 4 | -2 147 483 648 až 2 147 483 647 | Dim lVariable as Long | Dim lVariable& |
Single | 4 | -3,402E38 až 1,401E45 | Dim sVariable as Single | Dim sVariable! |
Double (negative) | 8 | -1,79769313486232E308 až -4,94065645841247E-324 | Dim dVariable as Double | Dim dVariable# |
Double (positive) | 8 | 4,94065645841247E-324 až 1,79769313486232E308 | Dim dVariable as Double | Dim dVariable# |
Currency | 8 | -922 337 203 685 477,5808 až 922 337 203 685 477,5807 | Dim cVariable as Currency | Dim cVariable@ |
Date | 8 | 1/1/100 až 12/31/9999 | Dim dVariable as Date | |
String | 1 za znak | Podle počtu znaků | Dim strVariable as String | Dim strVariable$ |
Object | 4 | Jakýkoliv objekt (Worksheet, Range,…) | Dim objVariable as Object | |
Variant | Různé | Jakákoliv hodnota nebo objekt | Dim vVariable as Variant | |
Bez typu | Variant | Automaticky Variant | Dim Variable |
Možnosti typování proměnných
' Ukázky typování proměnných
' Proměnné deklarované uvnitř procedury
Dim promenna As Integer
Const promenna As Long = 10
Static promenna As String
' Proměnné deklarované vně procedury
Public variableA As Double
Private variableB As Single
Public Const variableC As Boolean = True
Private Const variableD As Date = #12/31/9999#
Jmenné konvence u proměnných
Pro snadnější orientaci v kódu je výhodné proměnné pojmenovat s prefixem, který vypovídá o jejím typu. Za ním pak následuje samotný název proměnné.
Datový typ proměnné | Prefix |
---|---|
Boolean | b |
Integer | i |
Long | l |
Single | s |
Double | d |
Currency | c |
Date/Time | dt |
String | str |
Object | obj |
Variant | v |
Sub VariablesPrefixes()
Dim bAnswer As Boolean
Dim iNumber As Integer
Dim lNumber As Long
Dim sNumber As Single
Dim dNumber As Double
Dim cNumber As Currency
Dim dtDate As Date
Dim strText As String
Dim objObject As Object
Dim vAny As Variant
End Sub
Objektové proměnné
Objektové proměnné se využívají k uchování objektů jako je Range, Worksheet, PivotTable atd. Oproti klasickým proměnným pro uložení hodnoty se objektové proměnné liší u nastavení její hodnoty. Před názvem proměnné se používá klíčové slovo Set. Objektové proměnné se tedy setují.
Sub ObjectVariables()
' Deklarace proměnných
Dim rngData As Range
Dim wsNew As Worksheet
' Předání hodnot proměnným
Set rngData = ActiveSheet.Range("A1:G500")
Set wsNew = Worksheets.Add
End Sub
Deklarace více proměnných
Pokud je potřeba deklarovat více proměnných, můžeme tak učinit klasicky, a to uvedním každé proměnné na novém řádku nebo zápisem více proměnných na jednom řádku, oddělených čárkou. Pozor však na jejich správné typování.
Sub SeveralVariables()
Dim lVariable1 As Long
Dim lVariable2 As Long
Dim lVariable3 As Long
Dim lVariable4 As Long
Dim lVariable5 As Long
Dim lVariable6 As Long
End Sub
' Špatná deklarace
Sub SeveralVariables()
Dim lVariable1, lVariable2, lVariable3 As Long
Dim lVariable4, lVariable5, lVariable6 As Long
End Sub
' Správná deklarace
Sub SeveralVariables()
Dim lVariable1 As Long, lVariable2 As Long, lVariable3 As Long
Dim lVariable4 As Long, lVariable5 As Long, lVariable6 As Long
End Sub