無法確定爲什麼下面的代碼在'假設'時不會退出。任何幫助讚賞。問題是父Do While
迴路沒有儘快結束迴路RF
達到0.Nest Do雖然VBA中的循環沒有結束
我是否設置完全錯誤?不太熟悉VBA,並且幾年以來沒有用任何語言編寫程序,所以我非常生疏。
預先感謝您的任何見解!
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
注意,我編輯了一些代碼,是工作/不手頭涉及到這個問題。
是的,我有很多變數。我知道可能有更簡單的方法來編寫我正在嘗試做的事情。首先是
如果由於操作終止條件而導致外環的條件匹配,您應該檢查內循環 – lokusking
代碼中有一個邏輯漏洞。當滿足內部環路中的所有if條件時,RF不會遞減,所以外部環路無限循環。 –
不,這是不正確的,外環不是無限的。 – Mono