Denne vejledning lærer dig at oprette og bruge funktioner med og uden parametre i VBA
VBA indeholder en stor mængde indbyggede funktioner, som du kan bruge, men du kan også skrive dine egne. Når du skriver kode i VBA, kan du skrive den i en delprocedure eller en funktionsprocedure. En funktionsprocedure kan returnere en værdi til din kode. Dette er yderst nyttigt, hvis du vil have VBA til at udføre en opgave for at returnere et resultat. VBA-funktioner kan også kaldes indefra Excel, ligesom Excel's indbyggede Excel-funktioner.
Oprettelse af en funktion uden argumenter
For at oprette en funktion skal du definere funktionen ved at give funktionen et navn. Funktionen kan derefter defineres som en datatype, der angiver den datatype, du vil have funktionen til at returnere.
Du vil måske oprette en funktion, der returnerer en statisk værdi hver gang den kaldes - lidt som en konstant.
123 | Funktion GetValue () som heltalGetValue = 50Afslut funktion |
Hvis du skulle køre funktionen, returnerede funktionen altid værdien 50.
Du kan også oprette funktioner, der refererer til objekter i VBA, men du skal bruge Set Keyword til at returnere værdien fra funktionen.
123 | Funktion GetRange () som områdeIndstil GetRange = Range ("A1: G4")Afslut funktion |
Hvis du skulle bruge ovenstående funktion i din VBA -kode, ville funktionen altid returnere celleområdet A1 til G4 i det ark, du arbejder i.
Opkald til en funktion fra en delprocedure
Når du har oprettet en funktion, kan du kalde den fra andre steder i din kode ved at bruge en delprocedure til at kalde funktionen.
Værdien på 50 ville altid blive returneret.
Du kan også ringe til GetRange -funktionen fra en underprocedure.
I ovenstående eksempel kaldes GetRange -funktionen af delproceduren til at markere fedt i cellerne i områdeobjektet.
Oprettelse af funktioner
Enkelt argument
Du kan også tildele en eller flere parametre til din funktion. Disse parametre kan kaldes argumenter.
123 | Funktion ConvertKilosToPounds (dblKilo som Double) som DoubleConvertKiloToPounds = dblKilo*2.2Afslut funktion |
Vi kan derefter kalde ovenstående funktion fra en delprocedure for at regne ud, hvor mange pund en bestemt mængde kilo er.
En funktion kan om nødvendigt kaldes fra flere procedurer inden for din VBA -kode. Dette er meget nyttigt, fordi det forhindrer dig i at skulle skrive den samme kode igen og igen. Det giver dig også mulighed for at opdele lange procedurer i små håndterbare funktioner.
I ovenstående eksempel har vi 2 procedurer - hver af dem bruger funktionen til at beregne pundværdien af de kilo, der er givet til dem i dblKilo Argument for funktionen.
Flere argumenter
Du kan oprette en funktion med flere argumenter og videregive værdierne til funktionen ved hjælp af en delprocedure.
123 | Funktion CalculateDayDiff (dato1 som dato, dato2 som dato) som dobbeltCalculateDayDiff = Date2-Date1Afslut funktion |
Vi kan derefter kalde funktionen for at beregne mængden af dage mellem 2 datoer.
Valgfrie argumenter
Du kan også videresende valgfrie argumenter til en funktion. Med andre ord, nogle gange har du måske brug for argumentet, og nogle gange kan du ikke - afhængigt af hvilken kode du bruger funktionen med.
123456 | Funktion CalculateDayDiff (dato1 som dato, valgfri dato2 som dato) som dobbelt'tjek for anden dato, og hvis ikke der, gør Date2 lig med dagens dato.Hvis Date2 = 0 så Date2 = Date'beregne forskelCalculateDayDiff = Date2-Date1Afslut funktion |
Standard Argumentværdi
Du kan også angive standardværdien for de valgfrie argumenter, når du opretter funktionen, så hvis brugeren udelader argumentet, bruges den værdi, du har sat som standard, i stedet.
1234 | Funktion CalculateDayDiff (dato1 som dato, valgfri dato2 som dato = "06/02/2020") som dobbelt'beregne forskelCalculateDayDiff = Date2-Date1Afslut funktion |
ByVal og ByRef
Når du videregiver værdier til en funktion, kan du bruge ByVal eller ByRef nøgleord. Hvis du udelader en af disse, vil ByRef bruges som standard.
ByVal betyder, at du sender en kopi af variablen til funktionen, hvorimod ByRef betyder, at du refererer til variabelens oprindelige værdi. Når du sender en kopi af variablen (ByVal), variabelens oprindelige værdi er IKKE ændret, men når du refererer til variablen, ændres variabelens oprindelige værdi af funktionen.
1234 | Funktion GetValue (ByRef intA som heltal) Som heltalintA = intA * 4GetValue = intAAfslut funktion |
I funktionen ovenfor kunne ByRef udelades, og funktionen ville fungere på samme måde.
1234 | Funktion GetValue (intA som heltal) Som heltalintA = intA * 4GetValue = intAAfslut funktion |
For at kalde denne funktion kan vi køre en delprocedure.
123456789 | Subtestværdier ()Dim intVal som heltal'udfyld variablen med værdien 10intVal = 10'kør GetValue -funktionen, og vis værdien i det umiddelbare vindueDebug.Print GetValue (intVal)'vis værdien af variablen intVal i det umiddelbare vindueDebug.Print intValAfslut Sub |
Bemærk, at fejlfindingsvinduerne viser værdien 40 begge gange. Når du sender variablen IntVal til funktionen - værdien 10 sendes til funktionen og ganges med 4. Ved at bruge ByRef -søgeordet (eller helt udelade det) ændres værdien af IntVal -variablen. Dette vises, når du først viser resultatet af funktionen i det umiddelbare vindue (40) og derefter værdien af IntVal -variablen i fejlfindingsvinduet (også 40).
Hvis vi IKKE vil ændre værdien af den oprindelige variabel, skal vi bruge ByVal i funktionen.
1234 | Funktion GetValue (ByVal intA som heltal) Som heltalintA = intA * 4GetValue = intAAfslut funktion |
Hvis vi nu kalder funktionen fra en underprocedure, forbliver værdien af variablen IntVal på 10.
Afslut funktion
Hvis du opretter en funktion, der tester for en bestemt tilstand, og når betingelsen er fundet at være sand, vil du returnere værdien fra funktionen, skal du muligvis tilføje en Afslut funktion -sætning i din funktion for at forlade funktionen før du har kørt igennem hele koden i den funktion.
12345678910111213 | Funktion FindNumber (strSearch As String) Som heltalDim i As Integer'gå gennem hvert bogstav i strengenFor i = 1 Til Len (strSearch)'hvis bogstavet er numerisk, skal værdien returneres til funktionenHvis IsNumeric (Mid (strSearch, i, 1)) SåFindNumber = Mid (strSearch, i, 1)'afslut derefter funktionenAfslut funktionAfslut HvisNæsteFindNumber = 0Afslut funktion |
Funktionen ovenfor vil gå gennem den streng, der leveres, indtil den finder et tal og derefter returnere dette nummer fra strengen. Det finder kun det første tal i strengen, som det vil derefter Afslut funktionen.
Funktionen ovenfor kan kaldes af en underrutine som den nedenfor.
1234567 | Sub CheckForNumber ()Dim NumIs som heltal'videregive en tekststreng til funktionen find talNumIs = FindNumber ("Upper Floor, 8 Oak Lane, Texas")'vis resultatet i det umiddelbare vindueDebug.Print NumIsAfslut Sub |
Brug af en funktion fra et Excel -ark
Ud over at kalde en funktion fra din VBA -kode ved hjælp af en underprocedure, kan du også kalde funktionen inde fra dit Excel -ark. De funktioner, du har oprettet, skal som standard vises på din funktionsliste i sektionen Brugerdefineret på funktionslisten.
Klik på fx for at vise dialogboksen Indsæt funktion.
Vælg Brugerdefineret fra kategorilisten
Vælg den ønskede funktion blandt de tilgængelige Brugerdefinerede funktioner (UDF’er).
Alternativt, når du begynder at skrive din funktion i Excel, skal funktionen vises på rullelisten med funktioner.
Hvis du ikke vil have, at funktionen skal være tilgængelig inde i et Excel -ark, skal du sætte det private ord foran ordet Funktion, når du opretter funktionen i din VBA -kode.
123 | Privat funktion CalculateDayDiff (dato1 som dato, dato2 som dato) som dobbeltCalculateDayDiff = Date2-Date1Afslut funktion |
Det vises nu ikke i rullelisten, der viser de tilgængelige Excel -funktioner.
Interessant nok kan du dog stadig bruge funktionen - den vises bare ikke på listen, når du leder efter den!
Hvis du har erklæret det andet argument som Valgfri, kan du udelade det både i Excel -arket og i VBA -koden.
Du kan også bruge den funktion, du har oprettet uden argumenter i dit Excel -ark.