Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1172to1176
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sub kontra Function

Sub kontra Function
edie
Hallo zusammen,
ein Makro beginnt immer mit Sub und oder Function, was ist der Unterschied und
was sollte man beachten? In welchen fällen funktioniert bzw. Function nicht?
Kann mir jemand sagen worauf ich achten muss? Danke im Voraus.
Grüße-edie
AW: Sub kontra Function
19.08.2010 16:33:45
Hajo_Zi
Hallo Eddie,
eine Funktion benutzt Du um wiederholende Prozeduren auszuführen. z.B. Berechnung Kalenderwoche. Einer Funktion übergibst Du meist auch eine oder mehrere Parameter.

AW: Sub kontra Function
19.08.2010 16:38:40
edie
Hallo Hajo_Zi,
ist es schlimm, wenn ich auch einfache Makros mit Funktion beginne?
Vielen Dank.
Grüße-edie
AW: Sub kontra Function
19.08.2010 16:40:32
Hajo_Zi
Hallo Edie,
wie ist das gemeint?
Du kannst in einem Makro gleich als erstes eine Funktion aufrufen.
Gruß Hajo
Anzeige
AW: Sub kontra Function
19.08.2010 16:53:13
edie
Hallo Hajo_Zi,
wenn ich statt:
Sub Test()
End Sub
wie nachfolgend schreibe, sieht man das Makro nicht mehr im Fenster "Makro ausführen" unter
Makroname. Das ist ja manchmal so gewünscht.
Function Test()
End Function
Vielen Dank.
Grüße-edie
AW: Sub kontra Function
19.08.2010 16:56:20
Hajo_Zi
Hallo Edie,
ich benutze dazu die Zeile
Option Private Module unter
Option Explicit
Gruß Hajo
Unsichtbare Makros : Private Sub Test()
19.08.2010 16:59:38
NoNet
Hallo Edie,
wie nachfolgend schreibe, sieht man das Makro nicht mehr im Fenster "Makro ausführen" unter
Makroname. Das ist ja manchmal so gewünscht.
Dann verwende besser folgende Alternative :
Private Sub Test()
End sub
Durch das Schlüsselwort PRIVATE ist das Makro auch nicht mehr unter "Makro ausführen" sichtbar, aber es ist und bleibt ein MAKRO und keine FUNKTION ;-) !
Gruß, NoNet
Anzeige
AW: Unsichtbare Makros : Private Sub Test()
19.08.2010 17:07:04
edie
Hallo Hajo_Zi und NoNet,
werde eurem Rat folgen und Makros mit PRIVATE beginnen, wenn Bedarf.
Noch einmal Danke.
Grüße- edie
Zur Unterscheidung von Private und...
19.08.2010 19:17:09
Private
Private Module, Folks…
Der Gebrauch hat keine analogen Auswirkungen! Eine Private-Prozedur steht nur in ihrem Standortmodul für Zugriffe zur Verfügung. Steht eine ansonsten Public Prozedur aber in einem Private Module gilt das nicht! In beiden Fällen wdn aber sowohl Subroutinen als auch Funktionen nicht in Makro- bzw Fkts-Assi angezeigt (Letzteren hattest du wohl bei deinen Überlegun­gen vergessen, Edie!? Außerdem hättest du den recht erheblichen Unterschied auch in der VBE-Hilfe nachlesen können!)!
Außerdem wdn im Makro-Assi nur Subroutinen angezeigt, die auch von dieser Stelle aus aufgerufen wdn können. Verlangt die Subroutine eine Parameter-Übergabe, ist das idR nicht der Fall, es sei denn, alle Parameter sind Optional und Variant.
Übrigens (und nebenbei) kann man nicht nur eine FunctionProc innerhalb einer SubProc einsetzen bzw ggf letztere durch erstere ersetzen, sondern auch umgekehrt erstere durch letztere mit analoger Funktionalität, wenn man einen Parameter ByRef übergibt, den die Subroutine dann mit einem evtl Ergebnis füllt. Allerdings kann mit so etwas nicht die ZellFmlVerwendbarkeit einer echten Fkt aufgewogen wdn. Damit kann man so auch nicht die Beschränkungen für Fktt im TabBlatt umgehen (kann man aber durch „physische Entkopplung“ von Fkts- und Sub-Teil per EventProc erreichen). Hilft also nur in VBA-Prozeduren.
Gruß Luc :-?
Anzeige
AW: Zur Unterscheidung von Private und...
20.08.2010 11:00:58
Private
Hallo zusammen,
an der Stelle wäre noch zu ergänzen, dass die Verwendung von Option Private Module die Ausführung von Prozeduren oder Funktionen aus anderen Projekten heraus verhindert.
Das gilt jetzt natürlich nur, wenn das über einen Verweis läuft, mit Run geht es trotzdem.
Gruß, Jogy
Ja, das ist richtig! Danke! Außerdem...
20.08.2010 11:36:41
Luc:-?
…wäre noch zu ergänzen, dass Fktt in Private Modulen mit gewissen Vorbereitungen (ActiveX) doch im Fkts-Assi zur Ansicht gebracht wdn können. Im TabBlatt können sie in beiden Fällen (allerdings ohne Unterstützung) ohnehin verwendet wdn. In VBA-Prozeduren müsste man dann den Umweg über Evaluate nehmen u/o einen speziellen Adapter schreiben…
Gruß Luc :-?
Anzeige
Kein gutes Beispiel von Hajo...
19.08.2010 16:55:34
Hajo...
Hallo edie, hallo Hajo,
die Begründung von Hajo ist leider "knapp daneben" ;-) und daher als Beispiel ungeeignet !
Natürlich können auch SUBs wiederholt ausgeführt werden und mit Parameterübergabe ausgestattet werden.
Der eigentliche Vorteil einer ~f~FUNCTION (oftmals auch als UDF - User definded Function ~f~bezeichnet) ist der, dass sie dazu dient ein Ergebnis (Zahl, Datum, Text, ARRAY etc.) zurück zu liefern. Man kann durch den Aufruf einer ~f~Function~f~ also direkt eine Variable oder eine Zelle, Zellbereich etc. mit Werten befüllen. Z.B. :
Sub Test()
Dim Ergebnis
Ergebnis=Doppelt(5)
Msgbox Ergebnis
End sub
Function Doppelt(Zahl)
Doppelt=2*Zahl
End Function

Hier wird der Variablen Ergebnis das Doppelte des übergebenen Wertes (2 * 5 = 10) zugewiesen.
Diese Wertzuweisung kann man in VBA verwenden, oder auch als Tabellenblattfunktion (wenn die entsprechende ~f~FUNCTION~f~ in einem allgemeinen Modul oder im Klassenmodul des Tabellenblattes oder in einem AddIn enthalten ist) : =DOPPELT(5)
Einschränkungen einer UDF als Tabellenblattfunktion : Einige Anweisungen können in einer UDF nicht ausgeführt werden (z.B. Sheets(1).[A1]="Test" oder auch Activeworkbook.Save oder Sheets.Add etc.)
Eine ~f~FUNCTION~f~ dient also hauptsächlich zum "Berechnen" eines Ergebniswertes mit dem man im aufrufenden Makro/Tabellenblatt weiterrechnen kann, während eine ~f~SUB~f~ zur Ausführung verschiedener Aktionen dient.
Gruß, NoNet
Anzeige
AW: Kein gutes Beispiel von Hajo...
20.08.2010 08:57:10
Hajo...
Hallo zusammen,
Ich würde sogar noch einen Schritt weitergehen: Solange es rein um ein Programm und nicht die Anwendung einer UDF im Arbeitsblatt geht, gibt es eigentlich keinen grundsätzlichen Unterschied zwischen Sub und Function.
Denn auch beim Sub kann ich durch die Übergabe ByRef direkt einen Wert zurückbekommen. Und bei vielen zurückzugebenden Werten ist das unter Umständen sogar einfacher. Allerdings macht so etwas den Code schwer lesbar, weil nicht sofort offensichtlich ist, was nun der Rückgabewert ist. Bei einer Function ist das eindeutig.
Also grundsätzlich: Wenn es was zurückliefern soll (und sei es nur, dass kein Fehler aufgetreten ist), dann eine Function. Wenn nicht, dann ein Sub. Und Ausnahmen bestätigen hier ganz eindeutig die Regel ;).
Gruß, Jogy
Anzeige
AW: Sub kontra Function
19.08.2010 16:45:05
Gerd
Hallo Edie,
der wesentliche Unterschied ist, dass eine Funktion einen Rückgabewert erhalten kann.
Gruß Gerd
vielen, vielen Dank an Alle!
19.08.2010 17:03:31
edie
Hallo zusammen,
vielen herzlichen Dank.
Grüße- edie

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige