VBA计时器为所有内容提供0

时间:2015-07-14 15:32:36

标签: excel vba excel-vba

我有一个计时器,用于计算执行相同计算的数据类型之间执行时间的差异。

这是宏:

Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
Sub Function1_Var_RandNumCounter()

Dim Var_RandNum_X As Variant, Var_RandNum_Y As Variant, Count As Variant

For Count = 1 To Count = 1000000000
    Var_RandNum_X = Rnd(Now) ' Get rnd vals based on Now, built-in VBA property
    Var_RandNum_Y = Rnd(Now)
Next Count

Select Case IsNull("A2")
    Case True
        Cells.Clear
        Set target_sheet = ActiveSheet
        target_sheet.Range("A2").Value = -t
    Case False
        Set target_sheet = ActiveSheet
        target_sheet.Range("A2").Value = -t
End Select

'MsgBox GetTickCount - t, , "Milliseconds"
Call Function1_Dec_RandNumCounter

End Sub
Sub Function1_Dec_RandNumCounter()

Dim Count, Var_RandNum_X, dec_RandNum_X, Var_RandNum_Y, dec_RandNum_Y

dec_RandNum_X = CDec(Var_RandNum_X)
dec_RandNum_Y = CDec(Var_RandNum_Y) ' convert these vals to decimals

For Count = 1 To Count = 1000000000
    dec_RandNum_X = Rnd(Now) ' Get rnd vals based on Now, built-in VBA property
    dec_RandNum_Y = Rnd(Now)
Next Count

Select Case IsNull("B2")
    Case True
        Cells.Clear
        Set target_sheet = ActiveSheet
        target_sheet.Range("B2").Value = -t
    Case False
        Set target_sheet = ActiveSheet
        target_sheet.Range("B2").Value = -t
    End Select

'MsgBox GetTickCount - t, , "Milliseconds"
Call Function1_Int_RandNumCounter

End Sub
Sub Function1_Int_RandNumCounter()

Dim Count, Int_RandNum_X, Int_RandNum_Y

For Count = 1 To Count = 1000000000
    Int_RandNum_X = Rnd(Now)
    Int_RandNum_Y = Rnd(Now)
Next Count

Select Case IsNull("C2")
    Case True
        Cells.Clear
        Set target_sheet = ActiveSheet
        target_sheet.Range("C2").Value = -t
    Case False
        Set target_sheet = ActiveSheet
        target_sheet.Range("C2").Value = -t
End Select

'MsgBox GetTickCount - t, , "Milliseconds"

Call Function1_Double_RandNumCounter

End Sub
Sub Function1_Double_RandNumCounter()

Dim Count, Dbl_RandNum_X, Dbl_RandNum_Y

For Count = 1 To Count = 1000000000
    Dbl_RandNum_X = Rnd(Now)
    Int_RandNum_Y = Rnd(Now)
Next Count

Select Case IsNull("D2")
    Case True
        Cells.Clear
        Set target_sheet = ActiveSheet
        target_sheet.Range("D2").Value = -t
    Case False
        Set target_sheet = ActiveSheet
        target_sheet.Range("D2").Value = -t
End Select

'MsgBox GetTickCount - t, , "Milliseconds"

End Sub
Sub Function2_BarGraph()
'Put all of these vals in a 2D bar graph
End Sub

当我运行这个时,我得到了0s值。即使我增加小数位数,时间也是0.00000秒。我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

两件事:

  1. VB中的变量不是键入的(是Variant),除非您将它们声明为带有AS子句的特定类型。

    Dim Count AS Long, Int_RandNum_X AS Integer, Int_RandNum_Y AS Integer
    
  2. AS必须用于每个变量,下面的语句只会将Int_RandNum_Y声明为整数,使Int_RandNum_X变为变量:

        Dim Count AS Long, Int_RandNum_X, Int_RandNum_Y AS Integer
    
    1. 您永远不会将值分配给' t'。它在您的MsgBox调用中声明。你应该声明

      Dim t as Double 
      
    2. 在例程的早期,然后使用

      将当前时间分配给它
         t = Timer
      

      之后您可以使用

      获取经过的时间(以秒为单位)
         t = Timer - t