我有一个计时器,用于计算执行相同计算的数据类型之间执行时间的差异。
这是宏:
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秒。我该怎么办呢?
答案 0 :(得分:2)
两件事:
VB中的变量不是键入的(是Variant),除非您将它们声明为带有AS子句的特定类型。
Dim Count AS Long, Int_RandNum_X AS Integer, Int_RandNum_Y AS Integer
AS必须用于每个变量,下面的语句只会将Int_RandNum_Y声明为整数,使Int_RandNum_X变为变量:
Dim Count AS Long, Int_RandNum_X, Int_RandNum_Y AS Integer
您永远不会将值分配给' t'。它在您的MsgBox调用中声明。你应该声明
Dim t as Double
在例程的早期,然后使用
将当前时间分配给它 t = Timer
之后您可以使用
获取经过的时间(以秒为单位) t = Timer - t