私はあなたが各ワークシートであなたのタイマールーチンを呼び出す必要がわからない:ここではコードです。あなたは本当に時間を割り当てるワークシートのルーチンと知識が必要です。
1つの方法は、UserForm
にボタンの種類のコントロールパネルを使用することです。
![enter image description here](https://i.stack.imgur.com/vCLWd.png)
次にあなたがUserForm
コード内のクリックイベントのすべてを処理したい:それは、この(例として、わずか3ワークシート)のようになります。この例では、ワークシートのコレクションを作成し、各アイテムにボタンの名前である文字列キーでアクセスします。スケルトンコードは次のようになります
Option Explicit
Private Const START_COLOUR As Long = &HFF00&
Private Const START_TEXT As String = "Start"
Private Const STOP_COLOUR As Long = &HFF&
Private Const STOP_TEXT As String = "Stop"
Private mSheets As Collection
Private Sub btnClock1_Click()
StartStopButton btnClock1
End Sub
Private Sub btnClock2_Click()
StartStopButton btnClock2
End Sub
Private Sub btnClock3_Click()
StartStopButton btnClock3
End Sub
Private Sub StartStopButton(btn As CommandButton, Optional initialise As Variant)
Dim ws As Worksheet
Dim v As Variant
Dim startTime As Date
Set ws = mSheets(btn.Name)
ws.Activate
If Not IsMissing(initialise) Then
'Initialise the button and sheet
SetProperties btn, CBool(initialise)
ws.Range("A1").Value = "Not yet actioned"
ws.Range("B1:D1").ClearContents
Else
If btn.BackColor = START_COLOUR Then
'Set clock running
SetProperties btn, True
ws.Range("A1").Value = "Running"
ws.Range("B1").Value = Now
ws.Range("C1:D1").ClearContents
Else
'Stop clock and calculate difference
SetProperties btn, False
ws.Range("A1").Value = "Stopped"
ws.Range("C1").Value = Now
v = ws.Range("B1").Value
If Not IsEmpty(v) And IsDate(v) Then
'For DateDiff, choose whichever unit you want, I've used seconds ("s")
ws.Range("D1").Value = DateDiff("s", v, Now)
End If
End If
End If
End Sub
Private Sub SetProperties(btn As CommandButton, running As Boolean)
With btn
If running Then
.Caption = STOP_TEXT
.BackColor = STOP_COLOUR
Else
.Caption = START_TEXT
.BackColor = START_COLOUR
End If
End With
End Sub
Private Sub UserForm_Initialize()
Dim ws As Worksheet
'Assign all worksheets to collection
Set mSheets = New Collection
Set ws = ThisWorkbook.Worksheets("Sheet1")
mSheets.Add ws, btnClock1.Name
Set ws = ThisWorkbook.Worksheets("Sheet2")
mSheets.Add ws, btnClock2.Name
Set ws = ThisWorkbook.Worksheets("Sheet3")
mSheets.Add ws, btnClock3.Name
'Set all buttons to start
StartStopButton btnClock1, False
StartStopButton btnClock2, False
StartStopButton btnClock3, False
End Sub
ここにデータシートの画像があります: – TWalker
いいえ...画像を追加できません。しかし、私は8つの異なるタスク(開始時間と最終的な持続時間)のためのタスク時間を記録する8データシートを持っています。それは素晴らしいですが、私はツールの使いやすさを改善する必要があります。ですから、各マクロを開始/停止するためのボタンを備えたワークシートを1つ持っていますが、個々のワークシート上で実行するにはマクロが必要です。私はそれが少しはっきりしていることを願っています。 – TWalker