Transmiterea parametrilor de proceduri și funcții în VBA

Transmiterea parametrilor de proceduri și funcții în VBA, parametrii opționali (opțional), legătura de transmisie (ByRef) și prin valoarea (ByVal), utilizarea de legături în parametrii de transmisie

Parametrii - valori care sunt transmise de la unul la o altă procedură. În principiu, puteți face fără parametri, folosind doar variabile la nivel de modul, dar folosind parametrii programului îmbunătățește lizibilitatea. Aceasta procedura a fost în măsură să accepte parametri, trebuie mai întâi să-l declare cu următorii parametri. De exemplu, iată un exemplu de funcție simplă care adaugă două numere și afișează rezultatul:

Funcția FSUM (nItem1 Ca Integer, nItem2 Ca Integer)

FSUM = nItem1 + nItem2

Numiți-ar putea arata astfel:

În acest caz, am anunțat ambii parametri ca obligatorii, și, prin urmare, o încercare de a apela o funcție fără a trece un parametru (cum ar fi: MsgBox (FSUM (3))) va avea ca rezultat o eroare „argument nu este opțională“ - „parametru nu este facultativă“ . Pentru a putea trece unii parametri, acești parametri pot fi opțională. În acest scop, utilizați cuvântul cheie opțional:

Funcția FSUM (nItem1 Ca Integer, opțional nItem2 Ca Integer)

Ajutor pentru VBA functii incorporate parametrii opționali sunt închise între paranteze drepte.

Pentru a verifica dacă un parametru opțional a fost transmis, utilizat fie funcția IsMissing (tip varianta, daca acest parametru a fost utilizat), sau valoarea sa este comparată cu valoarea implicită (zero pentru date numerice, un șir gol pentru șir de caractere, etc.)

Apelarea cu o funcție de transfer parametru ar putea arata astfel:

nResult = FSUM (3, 2)

Cu toate acestea, există câteva lucruri care trebuie să fie abordate.

În exemplul nostru, vom trece parametrii de poziție, adică, valoarea 3 este atribuit primul parametru (nItem1), iar valoarea 2 - a doua (nItem2). Cu toate acestea, parametrii pot fi trecut prin nume:

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

Vă rugăm să rețineți că, în ciuda faptului că aici se face operațiune destul de familiară - Atribuirea valorii, operatorul de atribuire nu este folosit destul de normal - un colon cu un semn egal, la fel ca în C ++. Când utilizați semnul egal o eroare.

Desigur, în loc de transmiterea explicită a valorilor (așa cum am - 3 și 2), puteți utiliza variabile. Cu toate acestea, ce se întâmplă cu variabilele după ce „vizita“ la funcția, dacă funcția modifică valoarea ei? Este această valoare în afara funcției va rămâne aceeași sau schimba?

Totul depinde de modul în care se trec parametrii - prin referință (în mod implicit, puteți utiliza, de asemenea, cuvântul cheie ByRef sau de valoare - trebuie să utilizeze cuvântul cheie ByVal).

În cazul în care parametrii sunt transmise prin valoare, atunci, de fapt, în memoria este transmisă o copie a acestei variabile numită procedură și copia. Desigur, că nu a făcut această copie, variabila originală nu este afectată și nu va afecta procedura de asteptare.

Pentru a demonstra diferența poate fi un exemplu simplu:

Private Sub TestProc ()

„Declararea variabilei nPar1 și îi atribuie o valoare

Dim nPar1 Ca Integer

„Trece pe ca un parametru la o funcție nItem1 FSUM

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

„Și acum vom verifica ceea ce a devenit din nPar1 noastre variabile,“ după ce a vizitat funcții FSUM:

Funcția FSUM (nItem1 Ca Integer, nItem2 Ca Integer)

„Utilizăm valoarea variabilei

FSUM = nItem 1 + nItem 2

„Și apoi mi-a fost!

Funcția FSUM (nItem1 Ca Integer, nItem2 Ca Integer)

următoarea linie.

Funcția FSUM (ByVal nItem1 Ca Integer, nItem2 Ca Integer)

Puteți demonstra VBA compilator că ceea ce returnează funcția, nu ne interesează. Este suficient să nu încheie argumentele în paranteze. De exemplu, în cazul încorporat MsgBox ar putea arăta astfel:

și pentru funcția noastră -

Acest cod va funcționa perfect bine. Cu toate acestea, în cazul în care avem nevoie pentru a găsi în continuare că MsgBox se întoarce, va trebui să introduceți parametrii transmiși-l în paranteze:

Pentru mai multe built-in functii VBA compilator, în principiu, face imposibil de ignorat valoarea de returnare, forțând pentru a pune parametrii în paranteze și să ia valoarea de returnare.