VBA -funktion - opkald, returværdi og parametre

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.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave