Funktionen

Funktionen sind ähnlich wie Prozeduren. Also gilt zunächst alles, was bei Prozeduren geschrieben wurde auch für Funktionen. Allerdings gibt es einen entscheidenen Unterschied. Prozeduren können selbst Startpunkt eines Makros sein. Das geht nicht bei Funktionen. Diese können nur aus anderen Funktionen oder Prozeduren aufgerufen werden.

Wie Sie es aus den Prozeduren kennen, werden Funktionen z.B. mit der Zeile Function MeineFunktion() erstellt

Anschließend wird die Endzeile End Function wieder automatsich erstellt und zwischen diesen beiden Zeilen können Sie Ihren Code eingeben. Zum Code, den man erfassen kann, gibt es zu Prozeduren keinen Unterschied. Auch als Schlüsselwörter können grundsätzlich alle aus den Prozeduren bekannten Wörter benutzt werden.

Allerdings kann eine Funktion eine Wert zurückgeben. Dazu schauen Sie sich folgendes, modifiziertes Beispiel aus den Ausführungen zu Prozeduren an:

               
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit 

Private Sub Aufruf() 
     
   'einfacher Aufruf der Berechnung
  Dim Ergebnis As Currency 
   
  Ergebnis = Berechnung(3.92) 
   
   'Ergebnis der Berechnung anzeigen
  MsgBox Berechnung(3.92) 
     
End Sub 


Private Function Berechnung(ByVal Grundzahl As CurrencyAs Currency 

    Berechnung = Grundzahl * 5 

End Function 

In diesem Beispiel brauchen Sie nicht mehr die Variable Ergebnis. Zur Demonstation ist sie jetzt nochmal als privat in der aufrufenden Prozedur deklariert. Bei der Ausgabe als Messagebox (Zeile 11) sehen Sie aber bereits, dass die Variable nicht mehr notwendig wäre. Bei der Funktion selbst (Zeile 16) wurde der Funktionsname wie eine Variable mit einem Variablentyp deklariert, wozu Sie alle Variablentypen benutzen können. In der Funktion wurde das Ergebnis gleich in den Funktionsnamen als Variable gespeichert und wird so an die aufrufende Prozedur wieder zurückgegeben.

Diese Benutzung einer Funktion ist sehr praktisch und kann Code verschlanken. 

Zur Ergänzung sei noch ein Beispiel erklärt, das diese Funktion für ein Array benutzt: 

               
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit 

Sub Aufruf() 

    Dim MyArray()   As Variant   'Array für die Eingabe der Daten
    Dim i           As Long      'einfacher Zähler der Schleife
    Dim EndArray    As Variant   'Array für das Ergebnis
     
    ReDim MyArray(4) As Variant  'diemensionieren des Array
     
    For i = 0 To (UBound - 1) 
        MyArray(i) = i 
    Next 
     
    EndArray = Berechnung(MyArray()) 
     
     'Ausgabe zum Testen der Inhalte
    MsgBox EndArray(0) & Chr(13) & EndArray(1) & Chr(13) & _ 
           EndArray(2) & Chr(13) & EndArray(3) 
     
End Sub 


Function Berechnung(ByVal MyArr As VariantAs Variant 

    Dim x As Long 
     
    ReDim strArr(4) As Variant 
     
    For x = 0 To (UBound - 1) 
        strArr(x) = MyArr(x) + 10 
    Next 

    Berechnung = strArr  'Zuweisung des neuen Array an die Funktion

End Function 

In Zeile 5 wird das Array deklariert. Dies ist nicht unbedingt notwendig, wenn man mit Redim das Array später fest dimensioniert. Als Ausgabe und zur Demonstation wurde hier das Endarray deklariert. Eine Dimensionierung ist nicht notwendig, da das Zielarray automatisch die Dimensionen des ursprünglichen Arrays übernimmt. In Zeile 11 - 13 wird das Array nur mit Zahlenwerten gefüllt.

Die Funktion selbst wird als Variable für ein Array benutzt. Dazu muss man aber, da man die Funktion selbst nicht als Array deklarieren kann, ein temporäres Array in der Funktion deklarieren (Zeile 28). Die Schleife in Zeile 30 - 32 dient nur zur Berechnung der neuen Werte im Array. In Zeile 36 wird das berechnete Array der Funktion selbst zugewiesen. Damit wird die Funktion selbst praktisch zu einem Datenfeld (Array).

In Zeile 15 muss dieses Array aber trotzdem noch in der aufrufenden Prozedur einem weiteren temporären Array übergeben werden. Damit ist die Verarbeitung des Array abgeschlossen. In Zeile 18 - 19 wird dann nur noch das Ergebnis zur Überprüfung angezeigt. 

Ergänzend sei noch erwähnt, dass solche Übergaben von Arrays immer ein wenig Verarbeitungszeit kosten. Daher wird ein solches Konstrukt mit besonders großen Arrays nicht zufriedenstellnd funktionieren. Einen Test ist es aber immer wert. 

 



Diese Seite zu Mister Wong hinzufügen
Diese Seite zu ecure.del.icio.us hinzufügen
Diese Seite zu webnews hinzufügen
Diese Seite zu Google Bookmarks hinzufügen
Diese Seite zu linkarena hinzufügen
Diese Seite zu Yahoo hinzufügen










Für weitere Infos bitte auf den Text klicken

http://www.prawi-officewelt.de
 .::. nach oben .::.
 
 
©2008 - 2019 www.VBA-Wordwelt.de - alle Rechte vorbehalten
 
Kontakt | Impressum
los Suche

Cookies speichern Informationen lokal auf Ihrem Rechner, ohne die Verwendung kann der Funktionsumfang beeinträchtigt werden. Weitere Informationen


Annehmen