Я делаю простую игру в 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
Я могу отправить файл, если кому-то нужен он, чтобы понять, что происходит.
Благодаря
EDIT: Обновленный код:
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
Сейчас я получаю сообщение об ошибке во время выполнения: Метод 'OnTime' из object'_Application»не удалось
EDIT:
Открыл это сегодня утром, и он отлично работает.
Я еще не рассматривал ваш вопрос, но весь этот большой раздел кода может быть просто «Range (« AM1: AP20, AP21 »). Formula =" = staticRAND() "' –
Хорошо спасибо. Это имеет смысл и делает его лучше. И работает намного быстрее. – GooberZoober