„Funkció” és „Al” eljárások a VBA-ban

Beépített VBA funkciók

Mielőtt elkezdené saját VBA-függvényeit létrehozni, jó tudni, hogy az Excel VBA előre beépített függvények gazdag gyűjteményével rendelkezik, amelyeket a kód írása közben használhat.

Ezeknek a függvényeknek a listája megtekinthető a VBA szerkesztőben:

  • Nyisson meg egy Excel-munkafüzetet, és indítsa el a VBA-szerkesztőt (ehhez kattintson a gombra Alt + F11), majd nyomja meg a gombot F2.
  • Válasszon ki egy könyvtárat a képernyő bal felső sarkában található legördülő listából VBA.
  • Megjelenik a beépített VBA osztályok és funkciók listája. Kattintson a függvény nevére a rövid leírás megjelenítéséhez az ablak alján. megnyomva F1 megnyitja az adott szolgáltatás online súgóoldalát.

Ezenkívül a beépített VBA-funkciók teljes listája példákkal a Visual Basic Developer Centerben található.

Egyéni eljárások „Funkció” és „Sub” a VBA-ban

Az Excel Visual Basic programban egy adott feladatot végrehajtó parancskészlet kerül egy eljárásba. Funkció (Funkció) ill alatt (Subrutin). A fő különbség az eljárások között Funkció и alatt ez az eljárás Funkció eredményt, eljárást ad vissza alatt – nem.

Ezért, ha műveleteket kell végrehajtania és valamilyen eredményt kell elérnie (például több szám összege), akkor általában az eljárást használják Funkció, és néhány művelet egyszerű végrehajtásához (például egy cellacsoport formázásának megváltoztatásához) ki kell választania az eljárást alatt.

érvek

Különféle adatokat lehet átadni a VBA eljárásoknak argumentumok segítségével. Az argumentumlista egy eljárás deklarálásakor kerül megadásra. Például az eljárás alatt a VBA-ban hozzáadja a megadott egész számot (Integer) a kiválasztott tartomány minden cellájához. Ezt a számot az alábbi argumentum segítségével adhatja át az eljárásnak:

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

Ne feledje, hogy érvei vannak az eljárások mellett Funkció и alatt a VBA-ban nem kötelező. Egyes eljárások nem igényelnek érveket.

Választható érvek

A VBA eljárások opcionális argumentumokat tartalmazhatnak. Ezek olyan argumentumok, amelyeket a felhasználó megadhat, ha akar, és ha kihagyják, az eljárás az alapértelmezett értékeket használja számukra.

Visszatérve az előző példához, ha egy függvény egész számú argumentumát nem kötelezővé szeretné tenni, akkor az a következőképpen lesz deklarálva:

SubCells (opcionális i As Integer = 0)

Ebben az esetben az egész argumentum i az alapértelmezett 0 lesz.

Egy eljárásban több opcionális argumentum is lehet, amelyek mindegyike az argumentumlista végén található.

Érvek átadása érték és hivatkozás alapján

A VBA argumentumait kétféleképpen lehet átadni egy eljárásnak:

  • ByVal – érv átadása érték szerint. Ez azt jelenti, hogy csak az érték (azaz az argumentum másolata) kerül átadásra az eljárásnak, ezért az eljáráson belül az argumentumban végrehajtott változtatások elvesznek, amikor az eljárás kilép.
  • ByRef – érv átadása hivatkozással. Ez azt jelenti, hogy a memóriában lévő argumentumhely tényleges címe kerül átadásra az eljárásnak. Az eljáráson belüli argumentumban végrehajtott változtatások mentésre kerülnek, amikor az eljárás kilép.

Kulcsszavak használata ByVal or ByRef az eljárás deklarációjában megadhatja, hogy az argumentum hogyan kerüljön átadásra az eljárásnak. Ez az alábbi példákon látható:

Sub AddToCells(ByVal i As Integer) ... End Sub
Ebben az esetben az egész argumentum i érték szerint haladt át. Az eljárás elhagyása után alatt mind azzal készült i a változtatások elvesznek.
Sub AddToCells(ByRef i As Integer) ... End Sub
Ebben az esetben az egész argumentum i hivatkozással átment. Az eljárás elhagyása után alatt mind azzal készült i a változások az eljárásnak átadott változóban lesznek tárolva alatt.

Ne feledje, hogy a VBA argumentumai alapértelmezés szerint referenciaként kerülnek átadásra. Más szóval, ha nem használnak kulcsszavakat ByVal or ByRef, akkor az argumentum hivatkozással kerül átadásra.

Mielőtt folytatná az eljárásokat Funkció и alatt részletesebben, hasznos lesz még egyszer áttekinteni a két eljárástípus jellemzőit és különbségeit. Az alábbiakban röviden ismertetjük a VBA-eljárásokat Funkció и alatt és egyszerű példákat mutatunk be.

VBA eljárás „Funkció”

A VBA-szerkesztő felismeri az eljárást Funkcióamikor a következő nyitó és záró utasítások közé zárt parancsok csoportjával találkozik:

Funkció... Funkció befejezése

Mint korábban említettük, az eljárás Funkció VBA-ban (ellentétben alatt) értéket ad vissza. A visszatérési értékekre a következő szabályok vonatkoznak:

  • A visszatérési érték adattípusát az eljárás fejlécében kell deklarálni Funkció.
  • A visszatérési értéket tartalmazó változót ugyanúgy kell elnevezni, mint az eljárást Funkció. Ezt a változót nem kell külön deklarálni, mivel mindig az eljárás szerves részeként létezik. Funkció.

Ezt jól szemlélteti a következő példa.

VBA függvény példa: Matematikai művelet végrehajtása 3 számon

A következő példa egy VBA eljáráskódra látható Funkció, amely három típusú argumentumot igényel kettős (kettős pontosságú lebegőpontos számok). Ennek eredményeként az eljárás egy másik típusszámot ad vissza kettősegyenlő az első két argumentum összegével mínusz a harmadik argumentum:

Függvény SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 Végfüggvény

Ez a nagyon egyszerű VBA eljárás Funkció szemlélteti, hogyan adják át az adatokat egy eljárásnak argumentumokon keresztül. Látható, hogy az eljárás által visszaadott adattípus a következőképpen van definiálva kettős (mondják a szavak Duplaként az érvek felsorolása után). Ez a példa azt is mutatja, hogy az eljárás eredménye Funkció az eljárás nevével megegyező nevű változóban tárolva.

A VBA eljárás meghívása „Funkció”

Ha a fenti egyszerű eljárást Funkció a Visual Basic szerkesztő moduljába beillesztve hívható más VBA-eljárásokból, vagy használható egy Excel-munkafüzet munkalapján.

Hívja a VBA-eljárást „Funkció” egy másik eljárásból

Eljárás Funkció egy másik VBA-eljárásból hívható meg, ha egyszerűen hozzárendeli az eljárást egy változóhoz. A következő példa egy eljárás meghívását mutatja be Summinus, amelyet fent definiáltunk.

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

Hívja meg a „Function” VBA-eljárást egy munkalapról

VBA eljárás Funkció ugyanúgy meghívható Excel munkalapról, mint bármely más beépített Excel függvény. Ezért az előző példában létrehozott eljárás Funkció - Summinus a következő kifejezés beírásával hívható meg egy munkalap cellába:

=SumMinus(10, 5, 2)

VBA eljárás «Sub»

A VBA-szerkesztő megérti, hogy előtte van egy eljárás alattamikor a következő nyitó és záró utasítások közé zárt parancsok csoportjával találkozik:

Sub ... End Sub

VBA-eljárás „Sub”: 1. példa. Középre igazítás és betűméret változás a kiválasztott cellatartományban

Vegyünk egy példát egy egyszerű VBA-eljárásra alatt, amelynek feladata a kijelölt cellatartomány formázásának megváltoztatása. A cellák középre kerülnek (függőlegesen és vízszintesen is), és a betűméret a felhasználó által megadottra módosul:

Sub Format_Centered_And_Sized (Opcionális iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Ez az eljárás alatt műveleteket hajt végre, de nem ad eredményt.

Ez a példa egy opcionális argumentumot is használ Betűméret. Ha az érv Betűméret nem került eljárásra alatt, akkor az alapértelmezett értéke 10. Ha azonban az argumentum Betűméret eljárás alá került alatt, akkor a kiválasztott cellatartomány a felhasználó által megadott betűméretre lesz beállítva.

VBA aleljárás: 2. példa: Középre igazítás és félkövér betűtípus a kiválasztott cellatartományban

A következő eljárás hasonló az imént tárgyalthoz, de ezúttal az átméretezés helyett félkövér betűstílust alkalmaz a kiválasztott cellatartományra. Ez egy példa eljárás alatt, amely nem igényel érveket:

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

„Sub” eljárás meghívása az Excel VBA-ban

Hívja a „Sub” VBA-eljárást egy másik eljárásból

VBA eljárás hívásához alatt egy másik VBA-eljárásból meg kell írni a kulcsszót Hívás, eljárás neve alatt és tovább zárójelben az eljárás érvei. Ez az alábbi példán látható:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Ha az eljárás Format_Centered_And_Sized egynél több argumentuma van, ezeket vesszővel kell elválasztani. Mint ez:

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

Hívja meg a „Sub” VBA eljárást a munkalapról

Eljárás alatt nem írható be közvetlenül az Excel munkalap cellájába, ahogy az eljárással megtehető Funkciómert az eljárás alatt nem ad vissza értéket. Azonban eljárások alatt, amelyeknek nincs érve, és mint nyilvános (lásd alább) elérhető lesz a munkalap felhasználói számára. Így, ha a fent tárgyalt egyszerű eljárások alatt a Visual Basic Editor moduljába illesztve az eljárást Format_Centered_And_Bold Excel munkalapon használható lesz, és az eljárás Format_Centered_And_Sized – nem lesz elérhető, mert érvei vannak.

Itt van egy egyszerű módja egy eljárás futtatásának (vagy végrehajtásának). alatt, elérhető a munkalapról:

  • nyomja meg Alt + F8 (nyomja meg a gombot más és miközben lenyomva tartja, nyomja meg a gombot F8).
  • A megjelenő makrók listájában válassza ki a futtatni kívánt makrókat.
  • nyomja meg futás (fuss)

Eljárás végrehajtásához alatt gyorsan és egyszerűen billentyűparancsot rendelhet hozzá. Ezért:

  • nyomja meg Alt + F8.
  • A megjelenő makrók listájában válassza ki azt, amelyhez billentyűparancsot szeretne rendelni.
  • nyomja meg paraméterek (Opciók), és a megjelenő párbeszédpanelen írja be a billentyűparancsot.
  • nyomja meg OK és zárja be a párbeszédpanelt Macro (Makró).

Figyelem: Amikor billentyűparancsot rendel egy makróhoz, győződjön meg arról, hogy az Excelben nem szabványos módon használja (pl. Ctrl + C). Ha egy már létező billentyűparancsot választ ki, akkor az újra hozzárendelődik a makróhoz, és ennek eredményeként a felhasználó véletlenül elindíthatja a makrót.

A VBA eljárás hatóköre

Az oktatóanyag 2. része a változók és konstansok hatókörét, valamint a kulcsszavak szerepét tárgyalta. nyilvános и Magán. Ezek a kulcsszavak VBA-eljárásokkal is használhatók:

Public Sub AddToCells(i As Integer) ... End Sub
Ha az eljárás deklarációját a kulcsszó előzi meg nyilvános, akkor az eljárás az adott VBA-projekt összes modulja számára elérhető lesz.
Privát alcím AddToCells(i As Integer) ... End Sub
Ha az eljárás deklarációját a kulcsszó előzi meg Magán, akkor ez az eljárás csak az aktuális modulhoz lesz elérhető. Nem hívható meg más modulban vagy Excel-munkafüzetből.

Ne feledje, hogy ha a VBA-eljárás deklarálása előtt Funkció or alatt kulcsszó nincs beszúrva, az eljárás alapértelmezett tulajdonsága be van állítva nyilvános (vagyis ebben a VBA projektben mindenhol elérhető lesz). Ez ellentétben áll a változódeklarációkkal, amelyek alapértelmezés szerint ilyenek Magán.

Korai kilépés a „Function” és „Sub” VBA eljárásokból

Ha le kell állítania egy VBA-eljárás végrehajtását Funkció or alatt, anélkül, hogy megvárnánk a természetes végét, akkor ehhez vannak operátorok Kilépés funkcióból и Exit Sub. Ezen operátorok használatát az alábbiakban mutatjuk be, példaként egy egyszerű eljárással. FunkcióA, amely pozitív argumentumot vár a további műveletek végrehajtásához. Ha nem pozitív értéket adunk át az eljárásnak, akkor további műveletek nem hajthatók végre, így a felhasználónak hibaüzenetet kell látnia, és az eljárásnak azonnal ki kell lépnie:

Függvény VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Pozitív sVAT_Rate értéket várt, de megkapta" & sVAT_Rate Kilépési függvény vége, ha... Funkció vége

Kérjük, vegye figyelembe, hogy az eljárás befejezése előtt Funkció - Áfa összeg, egy beépített VBA funkció kerül a kódba MsgBox, amely figyelmeztető felugró ablakot jelenít meg a felhasználó számára.

Hagy egy Válaszol