2016-05-18 16 views
0

VBAのランタイム1004エラーに問題があります。私は時間登録ツールを作って、特定のアクションに必要な時間を測定しました。奇妙なことは、コードが10回中9回完璧に動作することです。 10回のうち1回だけ、このランタイムエラーが発生します。私はこの問題の原因を見ることができません!私は別のことはしませんが、まだこのエラーが発生しています....VBAランタイム1004エラー

私はgoogleを実行し、このランタイムエラーをApplication.Ontime関数と組み合わせて検索しましたが、そうすべき?下のコードは、私が順番にネット上のどこかで見つけたコードです。コマンドボタン(それぞれ特定のアクティビティー用)を持つワークシートがあり、一度押すとStartTimerプロシージャーが呼び出され(別のモジュールで)、もう一度押すとStopTimerプロシージャーが呼び出されます(別のモジュールで)。 StopTimerサブでエラーが発生することがあります。

Public StartTime As Single 
Public FinalTime As Single 

Sub starttimer() 

Application.OnTime Now + TimeValue("00:00:01"), "nexttick" 

End Sub 

Sub Nexttick() 
Sheet1.Range("y2").Value = Sheet1.Range("y2").Value + TimeValue("00:00:01") 
starttimer 
End Sub 

Sub Stoptimer() 
With ThisWorkbook.Worksheets("Home") 
Application.OnTime Now + TimeValue("00:00:01"), "nexttick", , False 
End With 
    Sheets("Log").Range("c10000").End(xlUp).Offset(1, 0) = Format(Sheet1.Range("y2").Value, "h:mm:ss") 

    Sheets("Home").Range("y2").Value = 0 
End Sub 

私のナットは、特にそれがほとんどの時間のために働いています!誰かが私を助けてくれることを願っています:)

ありがとうございます!

バート

Runtime error

Code thats generating the error

答えて

0

[最も早い時間]値がFalseにサブスケジュールするときに元々設定と同じでなければなりません。時間は最も近い秒に丸められます。なぜなら、たぶんあなたが時々それを離れていくことになるからです。あなたはセルまでの時間の値は、参照セルの代わりに、あなたのコード内での時間を設定を割り当てると見て:Application.OnTime Method (Excel)

値:


リファレンス

Public StartTime As Single 
Public FinalTime As Single 

Sub starttimer() 

StartTime = Now + TimeValue("00:00:01") 
Application.OnTime StartTime, "nexttick" 

End Sub 

Sub Nexttick() 
Sheet1.Range("y2").Value = Sheet1.Range("y2").Value + TimeValue("00:00:01") 
starttimer 
End Sub 

Sub Stoptimer() 
With ThisWorkbook.Worksheets("Home") 
Application.OnTime StartTime, "nexttick", , False 
End With 
    Sheets("Log").Range("c10000").End(xlUp).Offset(1, 0) = Format(Sheet1.Range("y2").Value, "h:mm:ss") 

    Sheets("Home").Range("y2").Value = 0 
End Sub 
EarliestTimeは、最も近い秒に丸められます。

設定以前に同じ 手順EarliestTime値で設定手順をクリアするからスケジュール

+0

ありがとうマクロマン!うーん、セルの値(y2)は、プロシージャの開始時刻ではなく、秒数です。タイマーを開始するために使用される「今」がタイマーを停止するために使用される「今」とはかなり異なっている(2つの間の差はセルy2に格納されている)ので、最も早い時刻の値がどのように等しいかわからない。したがって、これが当てはまる場合、コードは決して動作しません。私はあなたが正しいと思うが、丸めに問題があると思う...しかし、あなたの例のようにセルを参照することは残念なことに: –

+0

@BartKoolhaas更新された回答を参照してください –

+0

右:私は、まあ、何とかしても、タイマーは秒単位でカウントされることはなくなりましたが、ストップウォッチのようにレースをしていますので、IFのステートメントを使ってStartTime変数を更新するだけですその0(つまり新しい)。これはまた動作しません.. :( –

関連する問題