選択によってシート内の複数のセルに 3 つの異なるマクロを実装する

選択によってシート内の複数のセルに 3 つの異なるマクロを実装する

私は 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
    終了条件
終了サブ

複数のセルで同時にタイマーを実行したい場合は、はるかに複雑になりますので、あなたの他の質問

関連情報