Paraméterátadás az eljárások és függvények a VBA-ban

Paraméterátadás az eljárások és függvények a VBA, opcionális (nem kötelező) paraméterei az átviteli kapcsolat (ByRef) és érték (ByVal), a használata a kapcsolatok az átviteli paramétereket







Paraméterek - értékek, amelyeket át az egyikből a másikba eljárást. Elvileg megteheti paraméterek nélkül, kizárólag a modul szintű változók, de a paramétereket a program javítja az olvashatóságot. Ez az eljárás képes volt elfogadni a paramétereket, akkor először nyilvánítja az alábbi paraméterekkel. Például itt egy példa egy egyszerű függvény, amely összead két számot, és megjeleníti az eredményt:

Funkció fSum (nItem1 As Integer, nItem2 As Integer)

fSum = nItem1 + nItem2

Nevezzük a következőképpen nézhet ki:

Ebben az esetben azt jelentette mindkét paramétert, mint a kötelező, ezért arra törekszik, hogy hívja a funkció nélkül halad, hogy egy paraméter (például: MsgBox (fSum (3))) eredményez hibát „érv nem kötelező” - „paraméter nem választható” . Ahhoz, hogy át néhány paramétert, ezeket a paramétereket lehet kötelező. Erre a célra használja a kulcsszó kötelező:

Funkció fSum (nItem1 As Integer, fakultatív nItem2 As Integer)

Segítség a VBA beépített funkciókat az opcionális paraméterek szögletes zárójelek között.

Annak ellenőrzésére, hogy egy opcionális paraméter adása, használható akár IsMissing funkciót (ha ez a paraméter már használt Variant típusú), vagy az értéke összehasonlításra kerül az alapértelmezett értéket (nulla numerikus adatokat egy üres string karakterlánc, stb)

Egy funkció paraméter átadással a következőképpen nézhet ki:

nResult = fSum (3, 2)

Van azonban néhány dolog, hogy meg kell oldani.

A mi példánkban paraméterátadásra helyzetben van, azaz az érték 3 rendelt az első paraméter (nItem1) és a 2 értéket - a második (nItem2). Azonban a paraméterek átadhatók név szerint:







nResult = fSum (nItem 1 = 3, nItem 2: = 2)

Kérjük, vegye figyelembe, hogy annak ellenére, hogy itt véget ért nagyon ismerős működését - az értékek hozzárendelése az értékadó operátor használják nem egészen normális - a vastagbél egyenlőségjellel, mint a C ++. Amikor az egyenlőségjel hibát.

Természetesen, hanem a kifejezett értékközvetítés (mint mi - 3 és 2), akkor változókat. Mi történik azonban, hogy a változók után „látogatás” a funkciót, ha a funkció módosítja az értékét? Ez az érték kívül a függvény ugyanaz marad, vagy változás?

Minden attól függ, hogy a paraméterek telt el - referenciaként (alapértelmezés szerint akkor is használhatja a kulcsszó ByRef vagy értékben - ki kell használni a kulcsszó ByVal).

Ha a paraméterek érték szerint adódnak át, akkor valójában a memóriában egy másolatot a változó nevű eljárást, és a másolatot továbbítjuk. Persze, hogy nem, hogy ezt a példányt, az eredeti változó nem érintett, és nem befolyásolja a hívó eljárás.

Annak igazolására, a különbség lehet egy egyszerű példa:

Private Sub TestProc ()

„Változót nPar1 és rendeljen hozzá egy értéket

Dim nPar1 As Integer

„Átadja paraméterként a funkció nItem1 fSum

MsgBox (fSum (nItem1: = nPar1, nItem2: = 2))

„És most megnézzük, mi lett a változó nPar1,” miután meglátogatta fSum funkciók:

Funkció fSum (nItem1 As Integer, nItem2 As Integer)

„Az általunk használt változó értékét

fSum = nItem 1 + nItem 2

„És akkor én voltam!

Funkció fSum (nItem1 As Integer, nItem2 As Integer)

a következő sorban.

Funkció fSum (ByVal nItem1 As Integer, nItem2 As Integer)

Akkor bizonyítani VBA fordítóprogram, hogy mi a funkciója visszatér, nem vagyunk érdekeltek. Elég, hogy ne kösse érveit zárójelben. Például abban az esetben, beépített Msgbox ez a következőképpen nézhet ki:

és a mi funkció -

Ez a kód működik tökéletesen. Ha azonban meg kell még találni arra, hogy a MsgBox vissza, akkor meg kell adnia a paraméterek átadott zárójelben:

Sok beépített funkció VBA fordító, elvileg lehetetlenné teszi figyelmen kívül hagyja a visszatérési érték, arra kényszerítve, hogy a paramétereket zárójelben, és megteszi a visszatérési érték.