次のコードが「想定されている」ときに終了しない理由を理解できません。どんな助けもありがたい。問題は、親Do While
の値がRF
になるとループが終了しないことです。VBA内のNest Do Whileループが終了しない
これを完全に間違って設定しましたか?あまりにも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
注意/手元の問題に関係しません。
はい、私には1トンの変数があります。おそらく私がやろうとしていることをコード化する方がはるかに簡単な方法があることを知っています。
終了条件を操作しているので外部ループの条件が一致する場合は、内部ループをチェックインする必要があります – lokusking
コードにロジックホールがあります。内側ループ内のすべてのif条件が満たされると、RFは減少しないので、外側ループは無限にループします。 –
これは当てはまりませんが、外側のループは無限ではありません。 – Mono