2013-07-07 98 views
0

我在excel中做了一個簡單的遊戲,並且我有一個計時計時器,但每次點擊重新生成一個新遊戲時,計時器遞增計數增加一。例如,當它被打開時,它每秒鐘上升一次,但是當我重置遊戲時,它會以兩位數來計算,如果我再次重置它,則按三位數來計算。每當計時器重新啓動時計數器遞增都會增加

這裏是產生一個新的遊戲代碼:

Dim Counting As Boolean 
Sub New_Game() 
' 
' New_Game Macro 
' Generates a new game 
' 
' Keyboard Shortcut: Ctrl+n 
' 
    Call StopTimer 
    Range("C6:K14").Select 
    Selection.ClearContents 
    Range("AM1").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM2").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM3").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM4").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM5").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM6").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM7").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM8").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM9").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM10").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM11").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM12").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM13").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM14").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM15").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM16").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM17").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM18").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM19").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AM20").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN1").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN2").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN3").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN4").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN5").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN6").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN7").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN8").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN9").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN10").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN11").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN12").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN13").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN14").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN15").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN16").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN17").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN18").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN19").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AN20").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO1").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO2").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO3").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO4").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO5").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO6").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO7").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO8").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO9").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO10").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO11").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO12").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO13").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO14").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO15").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO16").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO17").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO18").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO19").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AO20").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP1").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP2").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP3").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP4").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP5").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP6").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP7").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP8").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP9").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP10").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP11").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP12").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP13").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP14").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP15").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP16").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP17").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP18").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP19").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP20").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("AP21").Select 
    ActiveCell.FormulaR1C1 = "=staticRAND()" 
    Range("A1").Select 
    Call StartTimer 
End Sub 
Sub StartTimer() 
    Counting = True 
    Call Increment 
End Sub 
Sub StopTimer() 
    Counting = False 
    Range("AH2") = 0 
End Sub 
Sub Increment() 
    If Counting Then 
     Application.OnTime (Now + TimeValue("00:00:01")), "Increment" 
     Range("AH2") = Range("AH2") + 1 
    End If 
End Sub 

我可以發送文件,如果有人需要它明白髮生了什麼。

感謝

編輯: 更新代碼:

Dim Counting As Boolean 
Dim earliest As Variant 
Sub New_Game() 
' 
' New_Game Macro 
' Generates a new game 
' 
' Keyboard Shortcut: Ctrl+n 
' 
    Call StopTimer 
    Range("C6:K14").Select 
    Selection.ClearContents 
    Range("AM1:AP20,AP21").Formula = "=staticRAND()" 
    Range("C6").Select 
    Call StartTimer 
End Sub 
Sub StartTimer() 
    'Counting = True 
    Call Increment 
End Sub 
Sub StopTimer() 
    'Counting = False 
    Range("AH2") = 0 
    Application.OnTime earliest, "Increment", , False 
End Sub 
Sub Increment() 
    'If Counting Then 
     earliest = Now + TimeValue("00:00:01") 
     Application.OnTime earliest, "Increment" 
     Range("AH2") = Range("AH2") + 1 
    'End If 
End Sub 

現在我得到一個運行時錯誤:object'_Application的方法 '準時'」失敗

編輯:

今天早上打開它,它完美的作品。

+4

我還沒有看過你的問題,但整個大段的代碼可以只是'範圍(「AM1:AP20,AP21」)。公式=「= staticRAND()」' –

+0

好的謝謝。這是有道理的,並使其更好。而且運行速度更快。 – GooberZoober

回答

2

Your NewGame()過程調用StopTimer,稍後調用StartTimer。這會比1秒快得多,所以定時器永遠不會停止 - 所以你有兩個定時器在運行,然後是三個,這就是爲什麼這個數字會增加。

我相信你需要使用OnTime方法的Schedule參數明確地取消上一個定時器。

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

您需要一個全局變量來存儲EarliestTime。這是必要的,取消基於這兩個程序的名字定時器和其最早時間:

Dim earliest As Variant 

在您的增量過程中,您設置此變量:

earliest = Now + TimeValue("00:00:01") 
Application.OnTime earliest, "Increment" 

然後,你StopTimer過程中,你可以取消以前的計時器:

Application.OnTime earliest, "Increment", , False 

有可能是沒有必要的Counting變量現在。

+0

這是你的意思: '子StopTimer()'' 計數= FALSE' '範圍( 「AH2」)= 0' 'Application.OnTime最早的 「增量」,FALSE' '結束小組' 'Sub Increment()' 'If Counting Then' 'earliest = Now + TimeValue(「00:00:01」)' 'Application。準時最早的, 「增量」'' 範圍( 「AH2」)=範圍( 「AH2」)+ 1' '結束If' '結束Sub' 因爲我得到一個運行時錯誤: 法「準時'object'_Application'失敗 – GooberZoober

+0

我看不清楚。你可以將它添加到你的第一篇文章的底部。無論如何,最早需要成爲一個全局變量(如Counting變量),並且在您嘗試將它與OnTime一起使用之前需要分配一個值。 –

+0

好吧,謝謝。我無法弄清楚如何使它看起來不錯。我想我做了你的意思,但不知道 – GooberZoober