Excel VBA有时需要延迟(Application.Wait或Debug.Print)

时间:2014-07-25 16:06:03

标签: vba excel-vba excel

多年来我注意到了这一点(因此它适用于Excel 2007以及很久以前),我希望其他人也见过这个,并找到了治疗方法。

有时(也许一年一次)我的代码中有一小部分需要某种延迟。

有时当调用此函数时,它会正确计算,但有时则不能。我发现当我单步执行该功能时,总是正确。因此,我尝试插入一些延迟。这些总能奏效,但看起来很愚蠢。

在下面的代码段中,我可以取消注释三条愚蠢行中的任何一条,并取得不同程度的成功。 (你可以看到我在想,也许Now或TimeValue函数可能是一个线索。)我也可以只注释+ TimeValue("00:00:00")部分并得到不同的结果。现在,它适用于已注释掉的+ TimeValue("00:00:00")部分。当我开始写这个问题时,我需要+ TimeValue("00:00:00")部分!

有没有人见过这个?有治疗方法吗?任何帮助将不胜感激!

我无法提供所有代码(超过35个模块,类,工作表和表单中的数千行),但这里有一个代码段:

Private Function Calc_4( _
        s As Long, _
        i As Long _
        ) As Boolean

   Dim l_d_DummyDoubleForWaiting as Double

   On Error GoTo EWE

   With w.cmp(s)

      'This fake delay seems to be required sometimes
      'Application.Wait Now + TimeValue("00:00:00")
      'Debug.Print Now + TimeValue("00:00:00")
      'l_d_DummyDoubleForWaiting = Now + TimeValue("00:00:00")

      .d_O(i) = _
            O_Given_Dh_and_a( _
                  .d_Dh(i), _
                  .pipe_Suction.fluid_out(i).d_a)

      [Bunch of stuff]

   End With

   Calc_4 = True
   Exit Function
EWE:
   Calc_4 = False
End Function

Private Function O_Given_Dh_and_a( _
      i_d_Dh As Double, _
      i_d_a As Double _
      ) As Double

   If (i_d_a_ft_per_s = 0) Then

      O_Given_Dh_and_a = 0

   Else

      O_Given_Dh_and_a = _
               i_d_Dh _
             / i_d_a ^ 2

   End If

End Function

0 个答案:

没有答案