Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
348to352
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
348to352
348to352
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Steigerung von Exit Sub möglich?

Steigerung von Exit Sub möglich?
08.12.2003 01:37:17
Franz W.
Hallo Freunde,

habe zu später Stunde noch eine Frage, von der ich mal wieder nicht weiß, ob es das überhaupt gibt.

Mit Exit Sub kann man aus einer Prozedur aussteigen.

Wurde diese Prozedur aber von einem Makro aus aufgerufen, dann wird nach dem Ausstieg mit dem Code des aufrufenden Makros weitergemacht.

Ist es möglich, auch das zu unterbinden? Gibt es also ein Anweisung, mit der man aus allen Makros - auch aus allen aufrufenden Makros aussteigen kann (vgl. Access: StoppMakro - StoppAlleMakros) ???

Vielen Dank für Eure Hilfe und Grüße
Franz

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Steigerung von Exit Sub möglich?
08.12.2003 01:52:48
PeterW
Hallo Franz,

da fängst du gerade an, vernünfigen Code zu produzieren und willst jetzt einen überflüssigen Befehl einsetzen. :-)

Gib der aufgerufenen Unterprozedur eine boolsche Variable mit, werte deren Wahrheitswert bei der Rückkehr in die Hauptprozedur aus und beende in Abhängigkeit davon die Hauptprozedur.

Gruß
Peter
So macht man das...
08.12.2003 02:04:39
Franz W.
Hallo Peter,

vielen Dank für die Blumen!! Und daran bist Du nicht ganz unschuldig :-))). In meiner absoluten Anfangszeit wollte ich gleich mal was, was damals für mich viel zu groß war. Du hast mir sehr geduldig da durch geholfen mit dem anschließenden Rat, viel im Forum mitzulesen, mitzumachen, ... Und das war's in der Tat, das hat mir sehr geholfen. Dir dafür auf jeden Fall ganz vielen Dank!! Dafür und für Deine Hilfe, die Du mir immer weider zukommen lässt.

Zum Thema: werd Deinen Tipp gleich mal umzusetzen versuchen, bin mir aber noch nicht ganz sicher, ob das in diesem Fall zieht, bzw. wie ich es konstruieren muss. Weil nämlich u.U. sehr viele nicht mehr sinnvolle Wechsel zu aufrufenden Makros durchlaufen werden, aber mal schauen.

Wenn Du (so spät noch) magst, könnt ich Dir die Datei auch hochladen, Du würdest das vielleicht schneller durchschauen. Aber gib mir bitte vorher Bescheid, will Dir das ja nicht aufdrücken.

Vielen Dank auf jeden Fall schon mal und Grüße
Franz
Anzeige
AW: So macht man das...
08.12.2003 02:13:44
PeterW
Hallo Franz,

bleib mir weg mit Dateien, in deren Struktur und Code ich mich erste einlesen muss. :-)

Vielleicht ein kleines Beispiel: der Code "unterroutine" wird gestartet, ruft "unter" auf und liefert in "unterroutine" den (geänderten) boolschen Wert.

Sub unterroutine()
Dim bTest As Boolean
bTest = True
MsgBox bTest
Call unter(bTest)
MsgBox bTest
End Sub



Sub unter(bTest As Boolean)
bTest = Not (bTest)
End Sub


Gruß
Peter
Dacht ich's mir doch :-)))
08.12.2003 02:33:12
Franz W.
Hallo Peter,

schon klar, drum hab ich sie auch nicht gleich mit geschickt. Wollte nur umgehen, das Problem schildern zu müssen, weil mir nicht ganz klar war, wie ichs sagen soll. Aber ich versuche es (und wenn DU Dir das jetzt nicht mehr reinziehen magst, ist auch okay! Hab ich vollste Verständnis dafür!!):

Hab eine UF, die ich mit einem einzigen Makro lade, und mit demselben Makro - je nach gedrücktem Button - so oder anders auswerte und wieder schließe (es handelt sich um Datensätze: ein Datensatz wird ausgewählt und die UF dann mit den dazugehörigen Daten geöffnet).

In der UF hab ich auch noch 2 Buttons, mit denen ich im Blatt einen Datensatz weiter vor oder zurück wandern kann, dazu müssen natürlich die Einträge in der UF angepasst werden. Also lasse ich von Button "Nächster Datensatz" die UF schließen, eine Zeile nach unten springen und die UF wieder öffnen. Dazu wird wieder obiges Makro aufgerufen. Wenn ich jetzt 20 Mal die Tasten "Voriger" oder "Nächster" drücke, wird immer wieder das obige Makro aufgerufen, ohne beendet zu werden. Wenn ich jetzt die UF schließe - per Abbrechen oder per Ok - wird der Rest des obigen Makros abgearbeitet, und jedesmal am Ende wird eines der beiden Makros "Voriger" oder "Nächster" gerufen, nur um noch "End Sub" zu sagen. Und so geht es dann 20 Mal hin und her.

Und mit einer Booleschen Variablen läuft das doch genau so, oder täusch ich mich da? Es wird immer das aufrufende Makro wieder gerufen, die Boolesche Variable ausgewertet, und dann wieder und dann wieder...

Und darum erschien es mir am einfachsten, alles Prozeduren auf einmal beenden zu können. Aber ich werde wohl das ganze Konstrukt ein wenig abändern müssen. Eine Sofortlösung hab ich inzwischen gefunden: Das Makro, das die UF aufruft, beende ich nach dem Aufruf der UF. Die Auswertung der Eingaben und das Schließen der UF schreibe ich in ein anderes Makro, das ich getrennt aufrufen kann. Damit ist der wichtigste Teil meines Problems gelöst. Und den Rest werde ich auch noch kriegen.

Vielen Dank auf jeden Fall für Deine Hilfe, beste Grüße (und gute Nacht(?))
Franz
Anzeige
AW: Dacht ich's mir doch :-)))
08.12.2003 03:12:08
PeterW
Hallo Franz,

habe gelesen aber nicht verstanden. :-)

Warum schließt du das Userform um einen neuen Datensatz anzeigen zu lassen?? Und warum lädst du das Userform und willst es im gleichen Code auswerten?? Mach das doch Schritt für Schritt: lade das Userform, lies Werte ein, lies in bestimmte Steuerelemente des UF andere Werte ein, verlass das UF und verarbeite dabei die aktuellen Werte des UF in der Tabelle.

Nochmal: gaaanz ruhig, Schritt für Schritt - im Bedarfsfall viiiile Unterroutinen - und jede einzelne sauber beenden.

Und Schritt für Schritt solltest du auch an Detailprobleme rangehen: eine Listbox kann man mit dem Userform_Inizialize Ereignis ebenso füllen wie mit dem Listbox_Change.

Hoffentlich war die Botschaft klar: wenn alles in einem Code (einer Sub) läuft machst du dir das Leben unnötig schwer.

Apropos schwer - so fühl ich mich im Moment und verlasse diesen Ort. :-)
Gruß
Peter
Anzeige
AW: Dacht ich's mir doch :-)))
08.12.2003 03:32:33
Franz W.
Hallo Peter,

" Hoffentlich war die Botschaft klar: wenn alles in einem Code (einer Sub) läuft machst du dir das Leben unnötig schwer. "

Oh wie recht Du hast, so langsam kapier ich das auch, mittlerweile mach ich das auch nicht mehr so. Aber am Anfang hab ich halt nacheinander hingeschrieben, was zu tun war, und dann stand eben alles in einem einzigen Makro. Und mit sowas hab ich's jetzt zu tun. Das Problem, weswegen ich diesen Thread ursprünglich aufgemacht habe, ist auch inzwischen durch Zerlegen eines Makros in mehrere Teile gelöst.

Das mit Laden und Neuladen werde ich auch noch Ändern, aber dazu muss ich einiges umschreiben. Und darum behelfe ich mir erstmal damit.

Aber so ein Tritt ab und zu kann sehr hilfreich sein.

Nochmal Danke und Gute Nacht
Franz
Anzeige
AW: Dacht ich's mir doch :-)))
08.12.2003 06:46:20
Hajo_Zi
Hallo Franz

ich habe jetzt nicht alle Beiträge gelesen. Die brutalste Methode zum Abbruch von Makros ist "End". Damit wird alles beendet.

Bitte keine Mail, Probleme sollten im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Pro und Excel Version XP Pro


AW: Dacht ich's mir doch :-)))
08.12.2003 07:59:51
Franz W.
Guten Morgen Hajo,

schön, von Dir auch wieder zu hören bzw. sehen. Vielen Dank für den Tipp. Aber wenn Du es schon "brutalst" nennst, sollte "End" doch wohl besser vermieden und das so Ganze umgeschrieben werden, dass man ohne das auskommt.

Vielen Dank und Grüße
Franz
Anzeige
AW: Dacht ich's mir doch :-)))
10.12.2003 21:06:28
Franz W
Hallo Hajo,

das "End" war mir zunächst eine große Hilfe, um mir aus meiner "größten Verzweiflung" rauszuhelfen. Aber inzwischen ist es mir gelungen alles so umzuschreiben, dass ich ohne das auskomme (siehe meine Antwort an PeterW von heute abend, wenn Du Lust hast).

Trotzdem vielen Dank und beste Grüße
Franz
Danke mal wieder für den Schuhlöffel ;-))
10.12.2003 21:03:31
Franz W.
Hallo Peter,

vielen Dank für die Tipps (Tritte?!? :-))), falls Du hier unten noch mal reinschaust.

Hab glaub ich inzwischen alles umgesetzt, bin mehrmals gescheitert, hab mehrmals wieder vonvorne angefangen, aber jetzt klappts: u.a. drei längere Routinen in acht kleine zerlegt, zweimal eine Boolesche Variable rein um Fehler zu vermeiden... Komme u.a. jetzt aus, ohne die UF immer wieder zu schließen und dann gleich wieder zu öffnen, geht jetzt alles bei geöffneter UF, bis alles fertig ist.

War also ein sehr konstruktiver Abend, der Montag, und dank Deiner Anregungen hab ich mich an das Entscheidende rangetraut. Ganz nüchtern ohne jetzt abzuschmalzen, Du hast neben anderen entscheidenden Anteil daran, dass ich da bin, wo ich jetzt bin!! Aber vor allem kam von Dir schon mehr als ein Mal so eine Initialzündung, wie die vom Montag. Und dafür mal wieder ein herzliches Dankeschön.

Schönen Abend ung beste Grüße
Franz
Anzeige
AW: Danke mal wieder für den Schuhlöffel ;-))
10.12.2003 22:53:23
PeterW
Hallo Franz,

natürlich lese ich auch "hier unten" noch - zumindest die Threads, in denen ich geschrieben hatte (für mehr reicht meine Zeit nicht).

Den größten Anteil an deinen Fortschritten hast du selbst: du liest, probierst, scheiterst und findest dann doch eine Lösung. Da mcht es wirklich Spaß, Anregungen zu geben; und natürlich auch, weil es immer eine Rückmeldung (und diesmal sogar eine sehr nette) von dir gibt.

Gruß
Peter

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige