我想运行以下蒙特卡罗模拟:
Sub MonteCarlo()
Application.ScreenUpdating = False
Dim x As Integer
For x = 1 To 25
Application.Calculate
Do
DoEvents
Loop While Not Application.CalculationState = xlDone
Worksheets("Monte Carlo").Range("A" & x).Value = Worksheets("Ex-Ante Te").Range("B2").Value
Worksheets("Monte Carlo").Range("B" & x).Value = Worksheets("Ex-Ante Te").Range("B3").Value
Worksheets("Monte Carlo").Range("C" & x).Value = Worksheets("Ex-Ante Te").Range("B4").Value
Next
Application.ScreenUpdating = True
End Sub
B2,B3和B4中的值取决于随机数,这些随机数应该在每次循环后重新计算。但是,代码不会中断并等到创建新的随机数并重新计算工作表,因为这部分似乎不起作用:
Application.Calculate
Do
DoEvents
Loop While Not Application.CalculationState = xlDone
我也尝试了这个,但它也没有用:
Application.Calculate
If Not Application.CalculationState = xlDone Then
DoEvents
End If
例如:如果我运行monte carlo,我得到的值不能是(B2和B3的值不可能组合在一起)。此外,当我手动运行蒙特卡罗(重新计算,写下数字)时,工作表工作正常。所以它必须与事实有关,代码似乎不会等待。
非常感谢任何帮助。