
私は Excel も VBA もまったくの初心者で、StartBtn、StopBtn、ResetBtn の 3 つのボタンをクリックしたときにタイマーとセルの色の変更が発生するコードを作成しようとしています。現在、コードは単一のセル B3 に対して機能していますが、シート上のクリックされたどのセルに対してもボタンが機能する必要があります。以下にコードを貼り付けますので、皆さんがコードを確認して、この混乱した初心者を救っていただければ幸いです。
コード:
Dim StopTimer As Boolean
Dim SchdTime As Date
Dim Etime As Date
Const OneSec As Date = 1 / 86400#
Private Sub StartBtn_Click()
Range("B3").Interior.ColorIndex = 6
StopTimer = False
SchdTime = Now()
[B3].Value = Format(Etime, "hh:mm:ss")
Application.OnTime SchdTime + OneSec, "Sheet1.NextTick"
End Sub
Private Sub ResetBtn_Click()
Range("B3").Interior.ColorIndex = -4142
StopTimer = True
Etime = 0
[B3].Value = "00:00:00"
End Sub
Private Sub StopBtn_Click()
Range("B3").Interior.ColorIndex = 4
StopTimer = True
Beep
End Sub
Sub NextTick()
If StopTimer Then
'Don't reschedule update
Else
[B3].Value = Format(Etime, "hh:mm:ss")
SchdTime = SchdTime + OneSec
Application.OnTime SchdTime, "Sheet1.NextTick"
Etime = Etime + OneSec
End If
End Sub
答え1
Excelでは、選択ワークシートで選択されている内容やアクティブな内容を指定するプロパティ。
selection
ただし、コードが複雑になり、使用すると将来的に問題が発生する可能性があることに注意してください。いつもの最良の方法ではありません。
答え2
Selection
コード全体でを使用するのではなく、Selection
を呼び出すときに現在選択されているセルを識別しStartBtn
、その場所を保存して他のルーチンで使用することをお勧めします。例:
Dim StopTimer As Boolean Dim SchdTime を Date として Dim Etime を Date として Dim SavedLoc を Variant として保存する ' ここ 定数 OneSec As Date = 1 / 86400# プライベートサブ StartBtn_Click() 選択数 <> 1 の場合 MsgBox "セルを 1 つ選択してください。" サブを終了 終了条件 SavedLoc = 選択.アドレス ' ここ 範囲(保存場所).Interior.ColorIndex = 6 ' ここで ストップタイマー = False SchdTime = 現在() 範囲(保存場所).Value = Format(Etime, "hh:mm:ss") ' ここで Application.OnTime SchdTime + OneSec、「NextTick」 終了サブ プライベートサブ ResetBtn_Click() 範囲(保存場所).Interior.ColorIndex = -4142 ' ここで ストップタイマー = True イータイム = 0 範囲(保存場所).Value = "00:00:00" ' ここで 保存場所 = なし ' ここ 終了サブ プライベートサブ StopBtn_Click() 範囲(保存場所).Interior.ColorIndex = 4 ' ここで ストップタイマー = True 保存場所 = なし ' ここ ビープ 終了サブ サブNextTick() StopTimerの場合 更新を再スケジュールしないでください それ以外 範囲(保存場所).Value = Format(Etime, "hh:mm:ss") ' ここで SchdTime = SchdTime + 1秒 Application.OnTime SchdTime、「NextTick」 Etime = Etime + OneSec 終了条件 終了サブ
複数のセルで同時にタイマーを実行したい場合は、はるかに複雑になりますので、あなたの他の質問。