为什么我的for循环没有加强?

时间:2018-01-11 10:48:30

标签: excel vba excel-vba

这可能是一个我忽略的简单问题。我有一个for循环拒绝以给定的间隔加强。下面的代码是一个更复杂的代码的摘录。我的程序运行了1小时,没有任何变化,我想把它缩小到导致运行时间很长的段。

我尝试在自己的模块中运行此代码,同样的问题也发生了。我在代码的主要代码中有其他for循环,而step只是这个问题。任何有助于找到我出错的地方都会非常感激。

Sub Test()


Dim h As Long
Dim BiezerP0 As Double
Dim BiezerP1 As Double
Dim BiezerP2 As Double
Dim BiezerP3 As Double
Dim BiezerValue As Double
Dim BiezerStepInterval As Double
Dim BiezerLocation As Double
Dim P0Time As Double

BiezerStepInterval = 0.167


            For h = 0 To 1 Step BiezerStepInterval

                BiezerP0 = ((1 - h) ^ 3) * P0
                BiezerP1 = 3 * ((1 - h) ^ 2) * h * P1
                BiezerP2 = 3 * (1 - h) * h * h * P2
                BiezerP3 = h * h * h * P3

                BiezerValue = BiezerP0 + BiezerP1 + BiezerP2 + BiezerP3

                BiezerLocation = h * BiezerSteps
                Cells(BiezerLocation + 4, 15) = BiezerValue
                Cells(BiezerLocation + 4, 16) = P0Time + (0.02 * BiezerLocation)


            Next h
End Sub

我能想到的唯一一个导致这个问题的事实是0.167不能直接进入1.这会影响它吗?

2 个答案:

答案 0 :(得分:4)

h应为Double,不长

Dim h As Double

答案 1 :(得分:2)

正如Magnetron所说,h应该是Double,原因是将0.167分配给Long会导致Long值为0 {1}} - 如立即窗口中所示:

?Clng(0.167)
 0 

0.167添加到0,并将结果分配给Long,再次会导致Long值为0。 ...

冲洗......重复......

这就是变量不会增加的原因。但是将变量类型更改为Double,您将不会失去精度。