Funcția VBA - Apel, valoare returnată și parametri

Acest tutorial vă va învăța să creați și să utilizați funcții cu și fără parametri în VBA

VBA conține o cantitate mare de funcții încorporate pe care le puteți utiliza, dar puteți scrie și ale dvs. Când scrieți cod în VBA, îl puteți scrie într-o procedură secundară sau o procedură funcțională. O procedură funcțională poate returna o valoare codului dvs. Acest lucru este extrem de util dacă doriți ca VBA să efectueze o sarcină pentru a returna un rezultat. Funcțiile VBA pot fi apelate și din interiorul Excel, la fel ca funcțiile Excel încorporate Excel.

Crearea unei funcții fără argumente

Pentru a crea o funcție, trebuie să definiți funcția dând funcției un nume. Funcția poate fi apoi definită ca un tip de date care indică tipul de date pe care doriți să le returneze funcția.

Poate doriți să creați o funcție care returnează o valoare statică de fiecare dată când este apelată - un pic ca o constantă.

123 Funcția GetValue () Ca întregGetValue = 50Funcția de sfârșit

Dacă ar fi să rulați funcția, funcția ar întoarce întotdeauna valoarea 50.

De asemenea, puteți crea funcții care se referă la obiecte în VBA, dar trebuie să utilizați Set Keyword pentru a returna valoarea din funcție.

123 Funcția GetRange () ca RangeSetați GetRange = Range („A1: G4”)Funcția de sfârșit

Dacă ar fi să utilizați funcția de mai sus în codul dvs. VBA, funcția ar returna întotdeauna intervalul de celule A1 la G4 în oricare dintre foile în care lucrați.

Apelarea unei funcții dintr-o procedură secundară

Odată ce ați creat o funcție, o puteți apela de oriunde din codul dvs. utilizând o procedură secundară pentru a apela funcția.

Valoarea 50 va fi întotdeauna returnată.

De asemenea, puteți apela funcția GetRange dintr-o procedură secundară.

În exemplul de mai sus, funcția GetRange este apelată prin procedura secundară pentru a îndrăzni celulele din obiectul interval.

Crearea de funcții

Argument unic

De asemenea, puteți atribui un parametru sau parametri funcției dvs. Acești parametri pot fi denumiți Argumente.

123 Funcția ConvertKilosToPounds (dblKilo ca Double) ca DoubleConvertKiloToPounds = dblKilo * 2.2Funcția de sfârșit

Putem apela apoi funcția de mai sus dintr-o Sub-procedură pentru a afla câte kilograme sunt o anumită cantitate de kilograme.

O funcție poate fi apelată din mai multe proceduri din codul dvs. VBA, dacă este necesar. Acest lucru este foarte util în sensul că vă împiedică să scrieți același cod din nou și din nou. De asemenea, vă permite să împărțiți procedurile lungi în funcții mici de gestionat.

În exemplul de mai sus, avem 2 proceduri - fiecare dintre ele folosește Funcția pentru a calcula valoarea lirei de kilograme transmise lor în dblKilo Argumentul funcției.

Argumente multiple

Puteți crea o funcție cu mai multe argumente și puteți transmite valorile funcției prin intermediul unei proceduri secundare.

123 Funcția CalculateDayDiff (Data1 ca dată, Data2 ca dată) ca dublăCalculateDayDiff = Data2-Data1Funcția de sfârșit

Putem apela apoi funcția pentru a calcula cantitatea de zile între 2 date.

Argumente opționale

De asemenea, puteți transmite argumente opționale unei funcții. Cu alte cuvinte, uneori este posibil să aveți nevoie de argument, iar alteori este posibil să nu - în funcție de codul cu care utilizați funcția.

123456 Funcția CalculateDayDiff (Data1 ca dată, Data opțională2 ca dată) ca dublă'verificați a doua dată și dacă nu este acolo, faceți Data2 egală cu data de astăzi.Dacă Data2 = 0, atunci Data2 = Data'calculează diferențaCalculateDayDiff = Data2-Data1Funcția de sfârșit

Valoare implicită a argumentului

De asemenea, puteți seta valoarea implicită a argumentelor opționale atunci când creați funcția, astfel încât dacă utilizatorul omite argumentul, va fi utilizată în schimb valoarea pe care ați pus-o ca implicită.

1234 Funcția CalculateDayDiff (Data1 ca dată, Data opțională2 ca dată = "06/02/2020") ca dublă'calculează diferențaCalculateDayDiff = Data2-Data1Funcția de sfârșit

ByVal și ByRef

Când treceți valori unei funcții, puteți utiliza fișierul ByVal sau ByRef Cuvinte cheie. Dacă omiteți oricare dintre acestea, ByRef este folosit ca implicit.

ByVal înseamnă că transmiteți o copie a variabilei către funcție, în timp ce ByRef înseamnă că vă referiți la valoarea inițială a variabilei. Când treceți o copie a variabilei (ByVal), valoarea inițială a variabilei este NU modificat, dar când faceți referire la variabilă, valoarea inițială a variabilei este modificată de funcție.

1234 Funcția GetValue (ByRef intA As Integer) Ca IntegerintA = intA * 4GetValue = intAFuncția de sfârșit

În funcția de mai sus, ByRef ar putea fi omis și funcția ar funcționa în același mod.

1234 Funcția GetValue (intA As Integer) Ca IntegerintA = intA * 4GetValue = intAFuncția de sfârșit

Pentru a apela această funcție, putem rula o sub-procedură.

123456789 SubTestValues ​​()Dim intVal As Integer'populează variabila cu valoarea 10intVal = 10'executați funcția GetValue și afișați valoarea în fereastra imediatăDebug.Print GetValue (intVal)'arată valoarea variabilei intVal în fereastra imediatăDebug.Print intValSfârșitul Sub

Rețineți că ferestrele de depanare arată valoarea 40 de ambele ori. Când treceți variabila IntVal către funcție - valoarea 10 este transmisă funcției și înmulțită cu 4. Folosind cuvântul cheie ByRef (sau omițându-l cu totul), se va AMENDA valoarea variabilei IntVal. Acest lucru este afișat atunci când afișați mai întâi rezultatul funcției în fereastra imediată (40), apoi valoarea variabilei IntVal în fereastra de depanare (de asemenea, 40).

Dacă NU dorim să schimbăm valoarea variabilei originale, trebuie să folosim ByVal în funcție.

1234 Funcția GetValue (ByVal intA As Integer) Ca IntegerintA = intA * 4GetValue = intAFuncția de sfârșit

Acum, dacă apelăm funcția dintr-o sub-procedură, valoarea variabilei IntVal va rămâne la 10.

Funcția de ieșire

Dacă creați o funcție care testează o anumită condiție și, odată ce condiția este găsită ca fiind adevărată, doriți să returnați valoarea din funcție, poate fi necesar să adăugați o instrucțiune Exit Function în Funcția dvs. pentru a ieși din funcție înainte ați parcurs tot codul din acea funcție.

12345678910111213 Funcția FindNumber (strSearch As String) Ca întregDim i Integerparcurgeți fiecare literă din șirPentru i = 1 către Len (strSearch)'dacă litera este numerică, întoarceți valoarea la funcțieDacă IsNumeric (Mid (strSearch, i, 1)) AtunciFindNumber = Mid (strSearch, i, 1)'apoi ieșiți din funcțieFuncția de ieșireEnd IfUrmătorulFindNumber = 0Funcția de sfârșit

Funcția de mai sus va parcurge șirul furnizat până când găsește un număr și apoi va returna acel număr din șir. Va găsi doar primul număr în șir așa cum va fi atunci Ieșire functia.

Funcția de mai sus poate fi apelată de o rutină Sub, cum ar fi cea de mai jos.

1234567 Sub CheckForNumber ()Dim NumIs ca întreg'treceți un șir de text la funcția de găsire a număruluiNumIs = FindNumber („Etajul superior, 8 Oak Lane, Texas”)'arată rezultatul în fereastra imediatăDebug.Print NumIsSfârșitul Sub

Utilizarea unei funcții dintr-o foaie Excel

În plus față de apelarea unei funcții din codul dvs. VBA utilizând o procedură secundară, puteți apela funcția și din foaia Excel. Funcțiile pe care le-ați creat ar trebui să apară în mod implicit în lista de funcții din secțiunea Definită de utilizator din lista de funcții.

Faceți clic pe fx pentru a afișa caseta de dialog Inserare funcție.

Selectați Definit de utilizator din lista de categorii

Selectați funcția de care aveți nevoie din cea disponibilă Funcții definite de utilizator (UDF).

Alternativ, când începeți să scrieți funcția în Excel, funcția ar trebui să apară în lista derulantă de funcții.

Dacă nu doriți ca funcția să fie disponibilă într-o foaie Excel, trebuie să puneți cuvântul privat în fața cuvântului Funcție atunci când creați funcția în codul dvs. VBA.

123 Funcție privată CalculateDayDiff (Data1 ca dată, Data2 ca dată) ca dublăCalculateDayDiff = Data2-Data1Funcția de sfârșit

Acum nu va apărea în lista derulantă care prezintă funcțiile Excel disponibile.

Este destul de interesant, totuși, puteți utiliza în continuare funcția - aceasta nu va apărea în listă atunci când o căutați!

Dacă ați declarat al doilea argument ca Opțional, îl puteți omite în foaia Excel, precum și în codul VBA.

De asemenea, puteți utiliza funcția a pe care ați creat-o fără argumente în foaia Excel.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave