Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Sub oder Function, das ist hier die Frage
zurück: Werte und Objekte von einem Userform zurückbekommen weiter: Kurz vorgestellt - Alte Menüs in Office 2007... Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Nepumuk
VB / VBA Programmierer


Verfasst am:
09. Nov 2008, 11:50
Rufname: Max
Wohnort: Dusseldoof


Sub oder Function, das ist hier die Frage - Sub oder Function, das ist hier die Frage

Nach oben
       Version: Office 2k (2000)

Hallo,

Wann benutzten wir was?

Die Frage ist ganz einfach zu beantworten.

Eine Sub – Prozedur ist wie eine Methode mir der wir sortieren, andere Arbeitsmappen öffnen, Zeilen löschen, Daten kopieren …
Eine Funktion kann zwar genau das selbe, wir bekommen aber über die Funktionsvariable (das ist der Name der Funktion) einen Wert zurückgeliefert.

Auch Sub – Prozeduren können über ihre Parameter Werte an die aufrufende Prozedur zurückgeben. Aber nur eine Funktion kann direkt in eine Abfrage oder Berechnung eingesetzt werden.

Mal ein paar Beispiele:

So eine Funktion macht keinen Sinn, da sie keinen Wert zurückliefert. Außerdem ist die Funktionsvariable nicht deklariert.
Code:
Public Function Beispiel1()
    MsgBox "Hallo"
End Function


Hier haben wir zwar die Funktionsvariable deklariert, sie gibt aber immer noch keinen Wert zurück. Hat also genauso wenig Sinn.
Code:
Public Function Beispiel2() As VbMsgBoxResult
    MsgBox "Hallo"
End Function


Jetzt haben wir es geschafft, die Funktionsvariable ist deklariert und die MsgBox übergibt einen Wert an unsere Funktionsvariable.
Code:
Public Function Beispiel3() As VbMsgBoxResult
    Beispiel3 = MsgBox("Hallo", vbRetryCancel)
End Function


Und nun bauen wir die Funktion noch in eine Abfrage ein.
Code:
Public Sub Beispiel()
    Select Case Beispiel3
        Case vbRetry
            MsgBox "Wiederholen gedrückt"
        Case vbCancel
            MsgBox "Abbrechen gedrückt"
    End Select
End Sub

Public Function Beispiel3() As VbMsgBoxResult
    Beispiel3 = MsgBox("Hallo", vbRetryCancel)
End Function


Wenn wir nun an Stelle der Funktion eine Sub – Prozedur verwenden würden, sähe das ganze so aus:
Code:
Public Sub Beispiel()
    Dim enmResult As VbMsgBoxResult
    Call Beispiel4(enmResult)
    Select Case enmResult
        Case vbRetry
            MsgBox "Wiederholen gedrückt"
        Case vbCancel
            MsgBox "Abbrechen gedrückt"
    End Select
End Sub

Public Sub Beispiel4(enmResult As VbMsgBoxResult)
    enmResult = MsgBox("Hallo", vbRetryCancel)
End Sub


Wie du siehst, können wir zwar den Parameter der Sub –Prozedur auswerten, aber nicht so elegant wie bei einer Funktion. Außerdem muss der Rückgabeparameter in der aufrufenden Prozedur deklariert werden.

Funktionen müssen aber nicht nur aus einer Zeile bestehen. Es ist bei großen, komplexeren Prozeduren ratsam diese in kleinere Funktionen aufzuteilen welche den Erfolg oder Misserfolg an die "Hauptprozedur" zurückgeben. In dieser Hauptprozedur wird dann entschieden wie es weitergeht. Ob z.B. eine andere Funktion aufgerufen wird, oder der Vorgang ganz abgebrochen werden muss.
Eine solche Art der Programmierung erhöht die Übersichtlichkeit, zudem können solche Funktionen, entsprechen parametriert, auch von anderen Prozeduren benutzt werden.

Das ganze mal mit Bezug zur Praxis:

Eine andere Mappe soll geöffnet werden um Daten daraus in die Mappe mit unserm Code zu kopieren. Dazu mal etwas Pseudocode:

Steuerprozedur Start

Wenn die Funktion „Setze den aktuellen Pfad auf den gewünschten“ erfolgreich war, dann
Wenn die Funktion „Zeige den Explorer“ erfolgreich war, dann
Wenn die Funktion „Öffne die Datei“ erfolgreich war, dann
Wenn die Funktion „Suche eine bestimmte Tabelle in der Mappe“ erfolgreich war, dann
Usw. usw.

Steuerprozedur Ende

Diese Art der Programmierung nennt sich Modularisierung. Viele einzelne Teile können immer wieder verwendet werden. So etwas lässt sich dann zu Funktionsbibliotheken z.B. in einem Addin zusammenfassen. Sie erleichtern die Arbeit ungemein, da bei Neuentwicklungen auf vorhandene und ausgetestete Funktionen zurückgegriffen werden kann.

_________________
De fontibus non est disputandum

Gruß
Nepumuk Cool
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Frage zu Gültigkeit in Verbindung mit Sverweis von Peter 3 ds17 808 04. Sep 2006, 15:27
< Peter > Frage zu Gültigkeit in Verbindung mit Sverweis von Peter
Keine neuen Beiträge Excel Formeln: Frage zu Summeprodukt, Uhrzeit zählen 10 Flohh 3252 20. März 2006, 12:11
Flohh Frage zu Summeprodukt, Uhrzeit zählen
Keine neuen Beiträge Excel Formeln: Frage zu SVERWEIS ??? 2 dan123 818 13. Jan 2006, 15:20
dan123 Frage zu SVERWEIS ???
Keine neuen Beiträge Excel Formeln: Frage zu einer Tabellenerstellung 10 iceman1981 814 28. Dez 2005, 11:30
ae Frage zu einer Tabellenerstellung
Keine neuen Beiträge Excel Formeln: Frage zu Kombination von "WENN" und SVERWEIS-Funkt 4 ghostrider - gast 991 17. Nov 2005, 23:43
ghostrider-gast Frage zu Kombination von "WENN" und SVERWEIS-Funkt
Keine neuen Beiträge Excel Formeln: blöde frage: liste abgleichen 8 dopex 1299 23. Sep 2005, 14:17
dopex blöde frage: liste abgleichen
Keine neuen Beiträge Excel Formeln: Frage zur Formel: Häufigkeit oder ähnlich Formel 9 tomek_9 3757 12. Apr 2005, 00:21
Hübi Frage zur Formel: Häufigkeit oder ähnlich Formel
Keine neuen Beiträge Excel Formeln: Frage zu Excel 2000 "Summe abrunden" 3 Benjamin22 1616 22. März 2005, 15:10
fl618 Frage zu Excel 2000 "Summe abrunden"
Keine neuen Beiträge Excel Formeln: FRAGE:daten in ein andres Tabellenblatt übernehmen?register? 1 maniwahn 1630 18. März 2005, 19:21
Hübi FRAGE:daten in ein andres Tabellenblatt übernehmen?register?
Keine neuen Beiträge Excel Formeln: Frage zu Rekursion in Excel ... 1 Gast 3622 04. März 2005, 14:43
Gast Frage zu Rekursion in Excel ...
Keine neuen Beiträge Excel Formeln: Frage - Fehler: [ODBC_Microsoft_Access_driver]... 0 diggler05 471 08. Feb 2005, 12:12
diggler05 Frage - Fehler: [ODBC_Microsoft_Access_driver]...
Keine neuen Beiträge Excel Formeln: Frage für eine Formel Arbeitstage zählen. 2 Brösel 1014 16. Dez 2004, 20:08
Gast Frage für eine Formel Arbeitstage zählen.
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: PHP Forum