Problem bei Arbeit mit Prozeduren

Vektor

Erfahrenes Mitglied
Hallo...

ich habe bei einem Programm folgendes Problem: Wenn ich in einem Form "Eingaben" auf den Button klicke startet das Programm eine Prozedur in einem Modul namens "Auswertung" welche wiederum eine weitere Funktion startet. Diese Funktion ruft noch eine letzte auf, welche die Werte in dem Form ausgibt. Jetzt hab ich das Problem dass jedesmal am ende einer Funktion wenn "end function" erreicht ist, das Programm zu der Prozedur zurückspringt welche die Funktion aufgerufen hat. Das macht bei mir jetzt das Problem dass, weil ich eine Prozedur durch eine If anweisung aufrufe, ein ganzer Block von weiteren If Anweisungen wiederholt wird, und somit zu viele Werte ausgegeben werden.

Kann ich irgendwie verhindern dass wenn ich am ende der letzten Funktion angelangt bin, dass das Programm zu den anderen Funktionen zurückspringt? Bei C gibt es da zb. System ("PAUSE").

Ich hoffe es ist verständlich. Wenn ihr den code dazu sehen müsst schreibt es bitte. Ich möchte nur keine rießigen Posts erstellen.

Danke im vorraus.
 
Ein bisschen Code wäre durchaus praktisch. Am Besten schreibst du nicht deinen ganzen Code sondern nur das, in welcher Reihenfolge und in welcher Prozedur die jeweiligen Prozeduren aufgerufen werden und welcher Codeteil dann nicht mehr ablaufen soll.

Aber zu deinem Problem: Prüf doch einfach mit einer weiteren If-Abfrage, ob der Codeteil, nachdem eine aufgerufene Prozedur abgearbeitet ist, nun noch ablaufen soll oder nicht.
 
Teile vom Code

Hier also noch die Teile vom Code an denen das Problem auftritt:

Hier wird nach Klick auf den Button die Funktion "Berechnung" im Modul "Auswertung aufgerufen.

Code:
Private Sub CmdGenerieren_Click()

(...)

'Aufruf der Funktion Berechnung

Auswertung.Berechnung

End Sub

In dieser Funktion werden Zahlen genereriert und in ein Feld namens "Spielzahlen" abgelegt. Dann wird die Funktion Zahlenauswertung aufgerufen.

Code:
Public Function Berechnung()

(...)

Auswertung.Zahlenauswertung

End Function

Hier in dieser Function wird geprüft ob eine Zahl doppelt vorkommt. Wenn ja wird wieder Funktion Berechnung aufgerufen. (Und das ist das Problem :) ) . Wenn nichts doppelt vorkommt dann wird die Funktion Ausgabe aufgerufen.

Code:
Public Function Zahlenauswertung()

Dim x As Integer

'In dieser Function wird geprüft ob eine Zahl doppelt gezogen wurde.
'Wenn ja wird eine neue Zahl erstellt bis keine Zahl doppelt ist.

x = 0

While x <= Anzahl - 1

        If Spielzahlen(x, 0) = Spielzahlen(x, 1) Then Berechnung
        If Spielzahlen(x, 0) = Spielzahlen(x, 2) Then Berechnung
        If Spielzahlen(x, 0) = Spielzahlen(x, 3) Then Berechnung
        If Spielzahlen(x, 0) = Spielzahlen(x, 4) Then Berechnung
        If Spielzahlen(x, 0) = Spielzahlen(x, 5) Then Berechnung
        
(...)
                
        x = x + 1
        
Wend

If Eingaben.chkOptimiert.Value = True Then Optimierung Else Ausgabe

End Function

Hier in dieser Funktion werden die Zahlen ausgegeben.

Code:
Private Function Ausgabe()

(...)

End Function

Das Programm läuft jetzt so ab:

Am Ende von Funktion "Ausgabe" springt es zum Ende von Funktion "Zahlenauswertung". Dann springt es zum Ende von Funktion "Berechnung". Sollte keine Zahl doppelt vorgekommen sein, springt es zur Click-Prozedur des Forms und beendet die Vorgänge ganz normal mit end sub. Dann passt auch die Ausgabe.

Wenn aber eine Zahl doppelt gezogen wurde, springt es statt zur Click-Prozedur an die Stelle des If-Blocks an der die doppelte Zahl gefunden wurde (weil ja von dort die Prozedur aufgerufen wurde) und macht die ganze Kette so oft durch wie es doppelte Zahlen gab. Dementsprechend oft wird auch die Funktion "Ausgabe" ausgeführt und es werden zu viele Zahlen ausgegeben.

Ich hoffe jetzt ist es verständlicher.

@
Shakie: Mir fällt nicht ein wie ich da mit einer If-Anweisung fragen soll ob die Prozedur nochmal ausgeführt werden soll. Wenn ich durch die If-Anweisung wieder eine andere Prozedur aufrufe, beginnt das wieder alles von vorne. Oder hab ich das falsch verstanden?
 
Versuch´s doch mal so:
Code:
Private Sub CmdGenerieren_Click()

(...)

Call Auswertung.Berechnung
Call Auswertung.Zahlenauswertung
If Eingaben.chkOptimiert.Value = True Then 
 Call Optimierung 
Else 
 Call Ausgabe
End If

End Sub
 
Wunderbar danke...so klappt es fehlerfrei.

Irgendwie hab ich vor lauter Code nicht mehr gesehen dass man die Funktionen ja auch über die Hauptprozedur aufrufen könnte. :)
 
Zurück