Hallo Patrick,
wenn du meinen Vorschlag unverändert als Lösung deines Problems ansiehst, musst du Schiffsbruch erleiden. Ich schrieb ja ausdrücklich, dass du die Prozedur für deine Zwecke anpassen musst. Ich kann nicht immer fertige Lösungen verschicken, zumal ich davon ausgehe, dass du das Programmieren gerade erlernst und von daher auch eine eigene Leistung in die Aufgaben stecken willst (oder zumindest solltest). Oft reicht die Spezifikation auch nicht, um die Aufgabe wirklich abschließend zu behandeln. Bei dir fehlt z.B. eine Angabe, was passieren soll, wenn es zwei oder drei größte Werte gibt.
In meinem Beispiel übergibt die Prozedur testen_Tausch die Werte 2, 6 und 8 an die Prozedur Tausch, die sie in ihre Varaiblen a, b, und c schreibt. Anstellen 2,6,8 musst du natürlich deine Variablen einsetzen, z.B.
tausch Val(Inputbox("1. Wert")), Val(Inputbox("2. Wert")), Val(Inputbox("3. Wert")), a
Tausch schreibt die Nummer des größten Wertes oder bei Gleichheit die höhere Nummer (1,2 oder 3) in ihre Variable d und gibt den Ablauf des Programms an Testen_Tausch zurück. Bei Tausch ist d das vierte Argument, deshalb übernimmt testen_Tausch diesen Wert in die Variable, die an vierter Stelle beim Aufruf von Tausch steht, also in a und gibt diesen Wert aus. Die beiden a in den Prozeduren haben nichts miteinander zu tun, da es bei der Übergabe nur auf die Stellung der Argumente in der Argumentenliste ankommt und jede Prozedur ihre eigenen Variablen hat (zumindest solange sie nicht öffentlich deklariert wurden).
Studiere doch etwas die VBA-Hilfe, z.B. zu "Übergeben von Argumenten". Vielleicht wird dir dann klarer, was abläuft.
Gruß
Holger
Holger schrieb am 22.04.2009 18:04:08:
Hallo Patrick,
vielleicht kannst du folgende Subs anpassen:
Sub tausch(ByVal a, ByVal b, ByVal c, d)
d = 3
If b > c Then d = 2: c = b
If a > c Then d = 1
End Sub
Sub testen_Tausch()
tausch 2, 6, 8, a
MsgBox a
End Sub
Gruß
Holger
Patrick schrieb am 22.04.2009 17:00:09:
Hallo,
ich habe hier ein bzw. mehrere Probleme.
Hier mal eines:
Ich habe folgende Aufgabenstellung:
Schreiben Sie eine Prozedur, die vier Zahlen als Paramter mit einem aufrufenden Programm austauscht. Die Prozedur soll ermitteln, welcher der ersten drei Paramater der größte ist und die Nummer des Paramters (1,2 oder 3) als vierten Paramter wieder an das Hauptprogramm zurückgeben.
Soweit bin ich bis jetzt gekommen:
Sub Zahlen() 'Prozedurstart
Dim z1 As Integer, z2 As Integer, z3 As Integer
Dim z4 As Integer
'Deklaration der Variablen im Wertebereich Integer; nur ganze Zahlen möglich
z1 = 2
z2 = 1
z3 = 4
Tausch z1,z2,z3 'Aufruf der Prozedur Tausch mit Parameterübergabe
MsgBox ("Der größte Wert ist " & z4)
End Sub
Sub Tausch(ByRef z4) 'Prozedur Tausch Rückgabe des Parameters z4 als größte Zahl
If z1 > z2 Then 'Überprüfung des größten Betrages der Variablen z1,z2,z3 mit einer If Kontrollstruktur
z1 = z4
ElseIf z1 z3 Then
z1 = z4
ElseIf z1 z3 Then
z2 = z4
Else
z3 = z4
'Der größte Wert wird in der Variable z4 gespeichert und an das Hauptprogramm übergeben
End If
End Sub
Allerdings bekomm ich da die Fehlermeldung bei dem Aufruf der Prozedur Tausch : Falsche Anzahl an Argumenten...
Ich bekomm das einfach nicht hin. Mal abgesehen davon, dass mein Programm sowieso nicht ganz der Aufgabenstellung entspricht.
Ich bitte dringend um Hilfe |