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

Prozedur macht was sie will...

Prozedur macht was sie will...
05.07.2007 17:28:22
julia

Hallo zusammen!!!
Ich habe da eine Prozedur, die merkwürdige Sachen macht:


Public Sub phaseB(tabl#(), veb2%)
Debug.Print "********************* Phase B ********************************"
Dim pivotspalteB#()
Dim pivotzeileB#()
ReDim Preserve pivotzeileB(n + 1)
ReDim Preserve pivotspalteB(m + p)
ReDim Preserve tablneu(m + p, n + 1)
Dim pivotelementB#
Dim pivotzeilenrB%
Dim pivotspaltenrB%
For i = 1 To m + p
For j = 1 To n + 1
Debug.Print "Tableau= " & tabl(i, j)
Next
Next
Dim zahl%
zahl = 0
For i = 1 To m + p
If tabl(i, veb2) <> 0 Then
zahl = zahl + 1
End If
Next
Debug.Print "zahl = " & zahl
Debug.Print "veb2 = " & veb2
If zahl = 0 Then
veb2 = veb2 + 1
If veb2 > n Then
'd.h. es gibt nur die gleichungen, hier STOP!!
Exit Sub
End If
phaseB tabl, veb2
End If
For i = 1 To n
If tabl(i, veb2) <> 0 Then
pivotelementB = tabl(i, veb2)
pivotspaltenrB = veb2
pivotzeilenrB = i
Debug.Print "pivotelementB = " & pivotelementB
For j = 1 To m + p
pivotspalteB(j) = tabl(j, pivotspaltenrB)
Debug.Print "pivotSpalte B =" & pivotspalteB(j)
Next
For l = 1 To n + 1
pivotzeileB(l) = tabl(pivotzeilenrB, l)
Debug.Print "pivotZeile B = " & pivotzeileB(l)
Next
End If
Exit For
Next
'Dieses Teil hier unten wird 2 mal ausgegeben, beim 2ten mal wird alles auf null gesetzt!!!!!
'Austauschschritt
For i = 1 To m + p
For j = 1 To n + 1
'tablneu(i, j) = tabl(i, j) - (pivotzeileB(j) * pivotspalteB(i) / pivotelementB)
Debug.Print tablneu(i, j) & "=" & tabl(i, j) & "-" & pivotzeileB(j) & "*" & pivotspalteB(i) & "/ _
" & pivotelementB
Next j
Next i
For i = 1 To m + p
For j = 1 To n + 1
tabl(i, j) = tablneu(i, j)
Debug.Print "Tableau neu= " & tabl(i, j)
Next
Next
End Sub


Die tabl#() ist eine Matrix, wird von einer anderen Prozedur übergeben, sie ist als Public definiert.
Die veb2% ist eine Zahl, und ebenfalls als Public definiert und wird von einer anderen Prozedur übergeben.
Mit dem Befehl Debug.Print lasse ich immer die Zwischenergebnisse im Direktfenster ausgeben, für Kontrolle.
Was ich nicht verstehe, wenn ich diese Prozedur ausführen lassen, dann ruft sich selbstängig noch einem Durchlauf erneut auf, dass sehe ich an den Ausgaben im Direktfenster. Nich allea wird 2mal ausgegeben, nur die letzten beide Teile.
Beim 1-ten Durchlauf macht die Prozedur dass, was sie machen muss. Aber beim 2-ten Durchlauf werden alle bisherigen Parameter auf Null gesetzt, die Ergebnisse sind dann unbrauchbar.
Kann mir jemand sagen, woran das liegt, und wie kann ich es verhindern, das die Prozedur sich nicht 2mal aufruft.??
Ich habe schon mit Exit Sub am Ende versucht, bringt troztdem nichts.
Danke Euch.
Schöne Grüße
Julia

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prozedur macht was sie will...
05.07.2007 22:31:48
Gerd L
Hallo Julia,
ohne deinen Code getestet zu haben, dazu fehlen auch ein paar Codezeilen zum "Umfeld", mit
der Zeile
phaseB tabl, veb2
löst Du mit Sicherheit eine Rekursion aus, falls die umschließende Bedingung zutrifft.
Gruß Gerd

AW: Prozedur macht was sie will...
06.07.2007 09:48:18
julia
Hallo Gerd,
erstmal Danke Dir für Deine Antwort, aber das hilft mir nicht so wirklich weiter.
Die Prozedur phaseB, wird durch die Prüfung einer Bedingung von einer anderen Prozedur aus aufgerufen.
und diese Bedingung ist währed der ganzen Prozedur phaseB erfüllt. Wenn ich dich richtig verstandn habe, dann ruft die Prozedur phaseB sich selbst auf, weil diese Bedingung immer noch erfüllt ist.
Aber damit die Prozedur phaseB nochmal aufgerufen wird, muss der Code aus einer anderen Prozedur ausgefürt werden (dass ist die Prozedur phaseA), wie kommt es dann dazu, dass diese Prozedur phaseA nochmal aufgerufen wird, wenn es in phaseB kein Befehl dafür gibt.
Und warum wird die phaseB nur ein mal erneut aufgerufen, denn die Bedingung für diese Prozedur ist immer während der phaseB erfüllt, also muss es dann unendlich viele male eusgefürt werden?

Anzeige
AW: Prozedur macht was sie will...
07.07.2007 10:06:04
Gerd L
Hallo Julia,
ich denke hier ruft sich das Makro in sich nochmals auf.
If zahl = 0 Then
veb2 = veb2 + 1
If veb2 > n Then
'd.h. es gibt nur die gleichungen, hier STOP!!
Exit Sub
End If
++++++++++++++++++++
phaseB tabl, veb2
++++++++++++++++++++
End If
Oder nicht?
Gruß Gerd

AW: Prozedur macht was sie will...
08.07.2007 08:19:11
schauan
Hallöchen,
ja, das sieht so aus. Einfach der besagten Zeile ein Hochkomma vorsetzen und schauen, ob das Ergebnis dann stimmt.
Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige