Kann nicht herausfinden, warum der folgende Code nicht beendet wird, wenn es "angenommen" wird. Jede Hilfe wird geschätzt. Das Problem ist die Eltern Do While
Schleife endet nicht die Schleife, sobald der Wert RF
0 erreicht.Nest Do While-Schleife in VBA endet nicht
Habe ich das komplett falsch eingerichtet? Nicht vertraut mit VBA, und habe in ein paar Jahren kein Programm in irgendeiner Sprache geschrieben, also bin ich sehr eingerostet.
Vielen Dank im Voraus für jede Einsicht!
Private Sub CalculateButton_Click()
'Assigning Variables
Dim cid As Currency
Dim tip As Currency
Dim cha As Currency
Dim A1 As Currency
Dim R1 As Currency
Dim B1 As Boolean
Dim A5 As Currency
Dim R5 As Currency
Dim B5 As Boolean
Dim A10 As Currency
Dim R10 As Currency
Dim B10 As Boolean
Dim A20 As Currency
Dim R20 As Currency
Dim B20 As Boolean
Dim A50 As Currency
Dim R50 As Currency
Dim A100 As Currency
Dim R100 As Currency
Dim B100 As Boolean
Dim tipCalc As Double
Dim RF As Currency
'Setting Boolean as false
B1 = False
B5 = False
B10 = False
B20 = False
B100 = False
'Setting Variables values
cid = 587.87
tip = 16
cha = 13
A1 = 36
R1 = 0
A5 = 85
R5 = 0
A10 = 50
R10 = 0
A20 = 420
R20 = 0
A50 = 0
R50 = 0
A100 = 0
R100 = 0
RF = 175
If A1 + A5 + A10 + A20 + A50 + A100 < RF Then
MsgBox "Not Enough Money In Register"
Exit Sub
End If
'Grabbing decimal from CID to calculate tip rounding next
tipCalc = cid - Int(cid)
'Calculating tip and entering into the excel sheet
'Removed for simplification
RF = RF - cha
Do While RF > 0
Do While B1 = False 'This is for the 1 dollar bills
If CheckWhole(RF, 5) And A1 < 5 Then
B1 = True
MsgBox "1 dollar done " & RF
Else
RF = RF - 1
A1 = A1 - 1
R1 = R1 + 1
End If
Loop
MsgBox RF > 0
Do While B5 = False '5 dollar bills
If CheckWhole(RF, 10) And A5 < 10 Then
B5 = True
MsgBox "5 dollar done " & RF
Else
RF = RF - 5
A5 = A5 - 5
R5 = R5 + 5
End If
Loop
MsgBox RF > 0
Do While B10 = False '10 dollar bills
If CheckWhole(RF, 20) And A10 < 20 Then
B10 = True
MsgBox "10 dollar done " & RF
Else
RF = RF - 10
A10 = A10 - 10
R10 = R10 + 10
End If
Loop
MsgBox RF > 0
Do While B20 = False '20 dollar bills
If CheckWhole(RF, 100) And A20 < 100 Then
B20 = True
MsgBox "20 dollar done " & RF
Else
RF = RF - 20
A20 = A20 - 20
R20 = R20 + 20
MsgBox "20 dollar working " & RF
End If
Loop
MsgBox "a20 " & RF > 0
Loop
'Output goes here, inputs data into cells on spreadsheet.
End Sub
Function CheckWhole(x As Currency, y As Currency) As Boolean
If Int(x/y) = (x/y) Then
CheckWhole = True
Else
CheckWhole = False
End If
End Function
Bitte beachte, dass ich einige Code herausgeschnitten, die Arbeit wurde/gehört nicht zur Hand zu diesem Thema.
Und ja, ich habe eine Tonne Variablen. Ich weiß, dass es wahrscheinlich einen viel einfacheren Weg gibt, zu programmieren, was ich versuche zu tun.
Sie sollten Ihre inneren Schleifen einchecken, wenn die Bedingung der äußeren Schleife übereinstimmt, da Sie ihre Beendigungsbedingung bearbeiten – lokusking
Es gibt eine logische Lücke in Ihrem Code. Wenn alle if-Bedingungen innerhalb der inneren Schleifen erfüllt sind, dekrementiert RF nicht, so dass die äußere Schleife unendlich weiterläuft. –
Nein, das ist nicht wahr, die äußere Schleife ist nicht unendlich. – Mono