Procedury „Function“ a „Sub“ ve VBA

Vestavěné funkce VBA

Než začnete vytvářet své vlastní funkce VBA, je dobré vědět, že Excel VBA má bohatou sbírku předpřipravených vestavěných funkcí, které můžete použít při psaní kódu.

Seznam těchto funkcí lze zobrazit v editoru VBA:

  • Otevřete sešit aplikace Excel a spusťte editor VBA (kliknutím to provedete Alt + F11) a poté stiskněte F2.
  • Vyberte knihovnu z rozevíracího seznamu v levé horní části obrazovky VBA.
  • Zobrazí se seznam vestavěných tříd a funkcí VBA. Kliknutím na název funkce zobrazíte její stručný popis ve spodní části okna. lisování F1 otevře stránku online nápovědy pro danou funkci.

Úplný seznam vestavěných funkcí VBA s příklady lze navíc nalézt na webu Visual Basic Developer Center.

Vlastní procedury „Function“ a „Sub“ ve VBA

V aplikaci Excel Visual Basic je sada příkazů, které provádějí konkrétní úkol, umístěna do procedury. funkce (Funkce) popř V (Podprogram). Hlavní rozdíl mezi postupy funkce и V je to postup funkce vrátí výsledek, postup V – ne.

Pokud tedy potřebujete provést akce a získat nějaký výsledek (například sečíst několik čísel), obvykle se používá postup funkcea abyste mohli jednoduše provést některé akce (například změnit formátování skupiny buněk), musíte vybrat postup V.

Argumenty

Různá data lze předat procedurám VBA pomocí argumentů. Seznam argumentů je uveden při deklaraci procedury. Například postup V ve VBA přidá dané celé číslo (Integer) do každé buňky ve vybraném rozsahu. Toto číslo můžete předat proceduře pomocí argumentu, jako je tento:

Sub AddToCells(i As Integer) ... End Sub

Mějte na paměti, že mít argumenty pro postupy funkce и V ve VBA je volitelný. Některé postupy nevyžadují argumenty.

Nepovinné argumenty

Procedury VBA mohou mít volitelné argumenty. Toto jsou argumenty, které může uživatel zadat, pokud chce, a pokud jsou vynechány, procedura pro ně použije výchozí hodnoty.

Vrátíme-li se k předchozímu příkladu, aby byl celočíselný argument funkce volitelný, byl by deklarován takto:

Sub AddToCells (Volitelné i As Integer = 0)

V tomto případě celočíselný argument i výchozí bude 0.

V proceduře může být několik volitelných argumentů, z nichž všechny jsou uvedeny na konci seznamu argumentů.

Předávání argumentů hodnotou a odkazem

Argumenty ve VBA lze předat proceduře dvěma způsoby:

  • ByVal – předání argumentu hodnotou. To znamená, že do procedury je předána pouze hodnota (tj. kopie argumentu), a proto budou při ukončení procedury ztraceny všechny změny provedené v argumentu uvnitř procedury.
  • ByRef – předání argumentu odkazem. To znamená, že skutečná adresa umístění argumentu v paměti je předána proceduře. Jakékoli změny provedené v argumentu uvnitř procedury budou uloženy při ukončení procedury.

Pomocí klíčových slov ByVal or ByRef v deklaraci procedury můžete určit, jak je argument předán proceduře. To je ukázáno na příkladech níže:

Sub AddToCells(ByVal i As Integer) ... End Sub
V tomto případě celočíselný argument i prošel hodnotou. Po opuštění procedury V vše vyrobeno s i změny budou ztraceny.
Sub AddToCells(ByRef i As Integer) ... End Sub
V tomto případě celočíselný argument i prošel odkazem. Po opuštění procedury V vše vyrobeno s i změny budou uloženy v proměnné, která byla předána proceduře V.

Pamatujte, že argumenty ve VBA jsou standardně předávány odkazem. Jinými slovy, pokud se nepoužívají klíčová slova ByVal or ByRef, pak bude argument předán odkazem.

Než budete pokračovat v postupech funkce и V podrobněji bude užitečné znovu se podívat na vlastnosti a rozdíly mezi těmito dvěma typy postupů. Následují krátké diskuse o postupech VBA funkce и V a jsou uvedeny jednoduché příklady.

VBA procedura «Funkce»

Editor VBA postup rozpozná funkcekdyž narazí na skupinu příkazů uzavřených mezi následujícími úvodními a závěrečnými příkazy:

Funkce ... Konec Funkce

Jak již bylo zmíněno dříve, postup funkce ve VBA (na rozdíl od V) vrátí hodnotu. Pro návratové hodnoty platí následující pravidla:

  • Datový typ návratové hodnoty musí být deklarován v záhlaví procedury funkce.
  • Proměnná obsahující vrácenou hodnotu musí být pojmenována stejně jako procedura funkce. Tuto proměnnou není nutné deklarovat samostatně, protože vždy existuje jako nedílná součást procedury. funkce.

Dobře to ilustruje následující příklad.

Příklad funkce VBA: Provádění matematické operace na 3 číslech

Následuje příklad kódu procedury VBA funkce, který přebírá tři argumenty typu Dvojnásobek (čísla s plovoucí desetinnou čárkou s dvojitou přesností). V důsledku toho procedura vrátí jiné číslo typu Dvojnásobekrovná se součtu prvních dvou argumentů mínus třetí argument:

Funkce SumMinus(dNum1 jako dvojnásobek, dNum2 jako dvojnásobek, dNum3 jako dvojnásobek) jako dvojnásobek SumMinus = dNum1 + dNum2 - dNum3 Koncová funkce

Tento velmi jednoduchý postup VBA funkce ilustruje, jak jsou data předávána proceduře prostřednictvím argumentů. Můžete vidět, že datový typ vrácený procedurou je definován jako Dvojnásobek (slova říkají Jako Double po seznamu argumentů). Tento příklad také ukazuje, jak výsledek postupu funkce uloženy v proměnné se stejným názvem jako název procedury.

Volání procedury VBA „Function“

Pokud výše uvedený jednoduchý postup funkce vložen do modulu v editoru Visual Basic, lze jej volat z jiných procedur VBA nebo použít na listu v sešitu aplikace Excel.

Volejte proceduru VBA „Function“ z jiné procedury

Postup funkce lze volat z jiné procedury VBA jednoduchým přiřazením této procedury k proměnné. Následující příklad ukazuje volání procedury Summinus, který byl definován výše.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Volejte proceduru VBA „Function“ z listu

Postup VBA funkce lze volat z listu aplikace Excel stejným způsobem jako jakoukoli jinou vestavěnou funkci aplikace Excel. Proto postup vytvořený v předchozím příkladu funkce - Summinus lze volat zadáním následujícího výrazu do buňky listu:

=SumMinus(10, 5, 2)

Procedura VBA «Sub»

Editor VBA chápe, že před ním je procedura Vkdyž narazí na skupinu příkazů uzavřených mezi následujícími úvodními a závěrečnými příkazy:

Sub ... Konec Sub

Procedura VBA „Sub“: Příklad 1. Změna zarovnání na střed a velikost písma ve vybraném rozsahu buněk

Zvažte příklad jednoduché procedury VBA V, jehož úkolem je změnit formátování vybraného rozsahu buněk. Buňky jsou vycentrovány (vertikálně i horizontálně) a velikost písma je změněna na uživatelem zadanou:

Sub Format_Centered_And_Sized(Volitelné iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Tento postup V provádí akce, ale nevrací výsledek.

Tento příklad také používá volitelný argument Velikost písma. Pokud argument Velikost písma nepřešlo do řízení V, pak jeho výchozí hodnota je 10. Pokud však argument Velikost písma předán do řízení V, pak bude vybraný rozsah buněk nastaven na velikost písma zadanou uživatelem.

Dílčí postup VBA: Příklad 2: Zarovnání na střed a tučné písmo ve vybraném rozsahu buněk

Následující postup je podobný právě probíranému, ale tentokrát místo změny velikosti aplikuje na vybraný rozsah buněk styl tučného písma. Toto je příklad postupu V, který nebere žádné argumenty:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Volání procedury „Sub“ v aplikaci Excel VBA

Volejte proceduru VBA „Sub“ z jiné procedury

Volání procedury VBA V z jiného postupu VBA, musíte napsat klíčové slovo volání, název procedury V a dále v závorce jsou argumenty postupu. To je znázorněno na níže uvedeném příkladu:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Pokud postup Format_Centered_And_Sized má více než jeden argument, musí být odděleny čárkami. Takhle:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Volejte proceduru VBA „Sub“ z listu

Postup V nelze zadat přímo do buňky listu Excel, jak to lze provést pomocí postupu funkceprotože postup V nevrací hodnotu. Nicméně postupy V, které nemají žádné argumenty a jsou deklarovány jako Soukromí (jak je uvedeno níže) bude k dispozici uživatelům listu. Pokud tedy jednoduché postupy diskutované výše V vložen do modulu v editoru jazyka Visual Basic, procedura Format_Centered_And_Tučné bude k dispozici pro použití v excelovém listu a postupu Format_Centered_And_Sized – nebude k dispozici, protože má argumenty.

Zde je snadný způsob, jak spustit (nebo spustit) proceduru V, přístupný z pracovního listu:

  • Stisknout Alt + F8 (stiskněte klávesu Další a přidržte jej a stiskněte klávesu F8).
  • V zobrazeném seznamu maker vyberte to, které chcete spustit.
  • Stisknout Běh (běh)

Chcete-li provést postup V rychle a snadno mu můžete přiřadit klávesovou zkratku. Pro tohle:

  • Stisknout Alt + F8.
  • V zobrazeném seznamu maker vyberte to, kterému chcete přiřadit klávesovou zkratku.
  • Stisknout parametry (Možnosti) a v zobrazeném dialogovém okně zadejte klávesovou zkratku.
  • Stisknout OK a zavřete dialog Makro (Makro).

Pozor: Při přiřazování klávesové zkratky makru se ujistěte, že se nepoužívá jako standardní v Excelu (např. Ctrl + C). Pokud vyberete již existující klávesovou zkratku, bude znovu přiřazena k makru a v důsledku toho může uživatel spustit makro omylem.

Rozsah postupu VBA

Část 2 tohoto tutoriálu pojednávala o rozsahu proměnných a konstant a roli klíčových slov. Soukromí и soukromý. Tato klíčová slova lze také použít s procedurami VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Pokud deklaraci procedury předchází klíčové slovo Soukromí, pak bude postup dostupný pro všechny moduly v daném projektu VBA.
Private Sub AddToCells(i As Integer) ... End Sub
Pokud deklaraci procedury předchází klíčové slovo soukromý, pak bude tento postup dostupný pouze pro aktuální modul. Nelze jej volat v žádném jiném modulu nebo ze sešitu aplikace Excel.

Pamatujte, že pokud před deklarováním procedury VBA funkce or V klíčové slovo není vloženo, je pro proceduru nastavena výchozí vlastnost Soukromí (to znamená, že bude k dispozici všude v tomto projektu VBA). To je na rozdíl od deklarací proměnných, které ve výchozím nastavení jsou soukromý.

Předčasné ukončení procedur VBA „Function“ a „Sub“

Pokud potřebujete ukončit provádění procedury VBA funkce or V, bez čekání na jeho přirozený konec, pak pro to existují operátory Funkce ukončení и Konec Sub. Použití těchto operátorů je ukázáno níže pomocí jednoduchého postupu jako příkladu. funkceA, která očekává, že obdrží kladný argument k provedení dalších operací. Pokud je proceduře předána nekladná hodnota, nelze provést žádné další operace, takže by se uživateli měla zobrazit chybová zpráva a procedura by měla být okamžitě ukončena:

Funkce VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Očekávána kladná hodnota sVAT_Rate, ale přijata" & sVAT_Rate Exit Function End If... End Function

Vezměte prosím na vědomí, že před dokončením postupu funkce - Částka_DPH, je do kódu vložena vestavěná funkce VBA MsgBox, která uživateli zobrazí vyskakovací okno s varováním.

Napsat komentář