繁体   English   中英

在VBA上的小数点上运行循环步骤被卡住

[英]run loop step on decimal on vba get stuck

这是我的代码来解决vba上的利率,但是循环将运行到死!

请帮助我找到代码上的问题!

非常感谢你!!!

Sub rate()

    Dim r As Long
    Dim y As Long
    Dim term0 As Long
    Dim term1 As Long
    Dim term2 As Long
    Dim term3 As Long
    Dim term4 As Long

    For r = 0.05 To 0.08 Step 0.001
        term0 = 10000
        term1 = 14000 / (1 + r)
        term2 = 18000 / (1 + r) ^ 2
        term3 = 22000 / (1 + r) ^ 3
        term4 = 25000 / (1 + r) ^ 4

        y = term0 + term1 + term2 + term3 + term4
        If y <= 75000 Then
            MsgBox (r)
        End If
    Next r

End Sub

谢谢simoco和谜!

修改后,下面的代码效果很好!

Sub rate()

    Dim r As Double
    Dim y As Long
    Dim term0, term1, term2, term3, term4 As Long

    r = 0.06
    Do
        r = r + 0.00001
        term0 = 10000
        term1 = 14000 / (1 + r)
        term2 = 18000 / (1 + r) ^ 2
        term3 = 22000 / (1 + r) ^ 3
        term4 = 25000 / (1 + r) ^ 4

        y = term0 + term1 + term2 + term3 + term4

    Loop Until y <= 75000

    Cells(11, 11) = r
    Cells(14, 12) = term0
    Cells(15, 12) = term1
    Cells(16, 12) = term2
    Cells(17, 12) = term3
    Cells(18, 12) = term4
    Cells(20, 12) = y

End Sub

更改

Dim r As Long

Dim r As Double

由于在类型转换后将r声明为Long ,因此循环将变为:

For r = 0 To 0.08 Step 0.001
    'code
Next r

但分配当r = 0.05 ,实际值r将是0r=0+0.001会给你0为好。 由于r从不增加,因此会产生无限循环。

顺便说一句 ,由于您使用double值进行操作,为了正确起见,您还应该将另一个值也从Long类型更改为Double

Long vs Double在其他地方已经被提及。
接下来的事情是在循环中的某个地方添加DoEvents。 这样就可以中断脚本的执行,也可以使Excel响应(更好)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM