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.