Sprachen zum Programmieren VBA

Hallo,

ich habe eine Frage zu einer alten Schulaufgabe, von der ich die Lösung aber nicht kenne:

Die Mitglieder eines Vereins erhalten am Jahresende eine Quittung über Ihre Mitgliedsbeiträge und Spenden. Die folgende Prozedur Namens „QuittungFinanzamt“ soll mittels geeigneter Schleifen ergänzt werden, und zwar in der Weise, dass alle Eingaben des Anwenders mit einer Fehlermeldung so lange abgelehnt werden, bis für die Variable „Mitgliedbeitrag“ der Wert 0 oder 200 und für die Variable „Spende“ ein Wert größer oder gleich 0 eingegeben wurde.

Sub QuittungFinanzamt()
Dim Summe As Double
Dim Spende As Double
Dim Mitgliedsbeitrag As Double

…=inputbox(„Bitte Mitgliedsbeitrag eingeben“)

…=inputbox („Bitte Höhe der Spende eingeben“)

…=Berechnung (Mitgliedbeitrag, Spende)

Msgbox(„Die Summe beträgt:“&Summe)

End Sub

Function Berechnung (…) as double

End Function

Hallo,

wie gefällt Dir das? Die beiden schleifen könnte man auch zusammenfassen.

Fruß Rainer

Sub QuittungFinanzamt()
Dim Summe As Double
Dim Spende As Double
Dim Mitgliedsbeitrag As Double

Do
 Mitgliedsbeitrag = Val(InputBox("Bitte Mitgliedsbeitrag eingeben"))
Loop While Mitgliedsbeitrag 0 And Mitgliedsbeitrag 200

Do
 Spende = Val(InputBox("Bitte Höhe der Spende eingeben"))
Loop While Spende 

Korrektur
Hallo Rainer,

Summe = Berechnung(Mitgliedsbeitrag, Spende)

Option Explicit
'
Sub QuittungFinanzamt()
Dim Summe As Double
Dim Spende As Variant
Dim Mitgliedsbeitrag As Variant
Do
 Mitgliedsbeitrag = InputBox("Bitte Mitgliedsbeitrag eingeben")
Loop While Mitgliedsbeitrag "0" And Mitgliedsbeitrag "200" And Not IsNumeric(Mitgliedsbeitrag)
Do
 Spende = InputBox("Bitte Höhe der Spende eingeben")
Loop While Spende 

Gruß
Reinhard

Hallo Reinhard,

Summe = Berechnung(Mitgliedsbeitrag, Spende)

stimmt! Den Fehler habe ich aus dem Original mit kopiert und nicht bemerkt, weil ich den Code nicht getestet habe. :smile:

Gruß Rainer

Schleifen in VBA (fürs Archiv, owT)

Hallo Ralf,

für’s Archiv ist das noch recht mager, das Beispiel enthält ja nur eine bestimmte Schleife.

Ich schreibe mal noch weitere Beispiele dazu, damit man auch etwas damit anfangen kann, wenn der Beitrag im Archiv gefunden wird. :smile:

Wenn man shon weiß, wie oft die Schleife durchlaufen wird, kann man eine Zählschleife verwenden:

For i = Startwert To Endwert Step Schrittweite 'kann auch negativ sein
 n = n + 1 'tu etwas 
Next

Sonst verwendet man eine Schleife mit einer Abbruchbedingung.
Die können kopfgesteuert oder fussgesteuert sein.

Eine Kopfgesteuerte Schleife verwendet man, wenn die Schleife nur unter bestimmten Bedingungen durchlaufen werden soll.

Eine fussgesteuterte Schleife, wenn das Programm in jedem fall in die Schleife laufen soll und die unter bestimmten Bedingungen immer wiederholt werden soll.

Die einfachste Kopfgesteuerte Schleife:

While tm 

oder auch:



    
    Do While tm 0 
     Exit Do
     End If
    Loop




Die schleife wartet auf den timer, man kann aber auch mit einer weiteren Abbruchbedingung die Schleife vorzeitig verlassen.

Fussgesteuert dann wie schon im Beispiel geschrieben:



    
    Do 
     Eingabe = UCase(Inputbox "Bitte etwas eingeben, 'Q' für Quit")
     'mach was damit ... 
    Lopp While Eingabe "Q"




Hab' ich etwas vergessen?

Gruß Rainer

Hab’ ich etwas vergessen?

Hallo Rainer,

jain, in sehr seltenen Ausnahmefällen muß man das tun was ansonsten sehr verpönt ist, mit
If „Bedingung“ Then Goto Sprungmarke.
Was ja quasi auch eine Art Schleife bildet/bilden kann.
Wenn es aber keine sehr speziellen (z.B. zeitkritische) Gründe gibt, ist
If „Bedingung“ Then Goto Sprungmarke.
unsauberes Programmieren, ergibt schwer lesbaren Code, mal von
On Error Goto Errorhandler o.ä.
abgesehen.

Ansonsten hast du ja alles genannt, auch wenn mir die Lopp-Schleife neu ist, sicher etwas was es nur in VB6.0 gibt *grins*

Und, ja, diese Beitragsfolge ist eh nur für das Archiv *einschätz*
Gründe für diese brutale Unterstellung:

a) http://wer-weiss-was.de/app/archive/show/5107883?spe…
b) das Eintrittsdatum des Anfragers.
c) diesbezügliche Erfahrungen meinerseits.
d) Mit Speck fängt man Mäuse, vielleicht entlockt ja mein Beitrag dem Anfragesteller ein Feedback *bin berechnend* :smile:

Gruß
Reinhard

Hallo Reinhard,

If „Bedingung“ Then Goto Sprungmarke.

brrrr *schüttel* … Hab’ ich erfolgreich verdrängt, daß es das auch mal gab.

Danke, daß Du kein Beispiel getippt hast. :smile:

Gruß Rainer

Moin, Rainer,

es ging mir nicht darum, hier alle Schleifentypen aufgezählt zu kriegen, sondern um die Archiv suche. „Sprachen in VBA“ - das grenzt doch an Irreführung.

Gruß Ralf