2010-04-19 117 views
0

每個人。這裏是我寫的一個小的VBA(Excel)函數,裏面充滿了調試的MsgBoxes。VBA項目中的整數溢出

我傳遞數字10和1作爲參數,當程序在開始第一次迭代之前到達For循環的頂部時出現溢出錯誤。

任何想法表示讚賞。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Function PerformanceTest(iterations As Integer, interval As Integer) As Double 
    Dim st, tot, k As Double 
    Dim n As Integer 
    tot = 0# 
    MsgBox "ok" 
    k = iterations + tot 
    MsgBox "ookk" 
    n = 1 
    MsgBox "assigned" 
    For n = 1 To iterations 
     MsgBox n 
     st = Timer 
     Application.Calculate 
     tot = tot + (Timer - st) 
     Sleep (1000 * interval) 
    Next n 
    'MsgBox (tot/k) 
    PerformancTest = tot/k 
End Function 
+0

像其他人一樣,我不能讓「溢出」出現。我同意托馬拉克的觀點,可能會指出這個職能以外的問題。但是如果你的代碼在你說的那個地方停滯不前,那麼Tomalak的想法很難接受。 – Smandoli 2010-04-19 20:15:52

回答

2

冗餘拆除,基本保持不變的功能沒有錯誤運行在我的Excel 2003

Function PerformanceTest(iterations As Integer, interval As Integer) As Double 
    Dim st, tot As Double 
    Dim n As Integer 

    For n = 1 To iterations 
    st = Timer 
    Application.Calculate 
    tot = tot + Timer - st 
    ''# Sleep (1000 * interval) 
    Next n 

    PerformanceTest = tot/(iterations + tot) 
End Function 

所以...你看到的錯誤可能不是功能本身。

P.S .: Pro提示:;-)使用Debug.Print代替MsgBox作爲調試輸出。

+0

同樣適用於我..:o) – CResults 2010-04-19 17:03:48

+0

@mcoolbeth:你最終能告訴我們錯誤是什麼嗎? – Tomalak 2010-04-19 20:07:55

+2

一般意見: 我總是使用Long而不是Integer,因爲它更快。 昏暗的街,TOT作爲雙「聖已經變暗爲Variant 爲Excel的計算可知的不同口味的一組精確的定時器: http://msdn.microsoft.com/en-us/library /aa730921.aspx – 2010-04-20 07:04:01

0

再次看起來像一個傻瓜的風險,這裏有一些輸入。

我會建立我這樣的計時器功能。對我來說似乎更簡單。 (不包括我刪除了一些非必要的行 - 我的意思是結構簡單。)

如果它沒有溢出運行,那麼這將是一個很好的加。

Function PerformanceTest(iterations As Integer, interval As Integer) As Double 

Dim st, tot, k As Double 
Dim n As Integer 

PerformanceTest = Timer 
k = iterations + tot 
n = 1 

For n = 1 To iterations 
    '' insert operation that takes time 
    Sleep (1000 * interval) 
Next n 

PerformanceTest = Timer - PerformanceTest 
PerformanceTest = PerformanceTest/k 
End Function