蒙特卡罗代码确实等到计算

时间:2016-08-25 15:21:52

标签: vba excel-vba refresh montecarlo excel

我想运行以下蒙特卡罗模拟:

  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的值不可能组合在一起)。此外,当我手动运行蒙特卡罗(重新计算,写下数字)时,工作表工作正常。所以它必须与事实有关,代码似乎不会等待。

非常感谢任何帮助。

0 个答案:

没有答案