Sana her çalışma için zamanlayıcı rutin aramaya gerek emin değilim: İşte kod. Gerçekten sadece bir rutinine ve zaman çizelgesini atayacağınız çalışma sayfasına ihtiyacınız var.
Tek yön, UserForm
üzerindeki bir tür kontrol panosuyla olabilir.

Sonra UserForm
kodun içinde tıklama etkinliklerinin tümünü halledeceğini
: Böyle bir şey (örnek olarak sadece 3 çalışma sayfaları) görünebilir. Bu örnekte, bir çalışma sayfası koleksiyonu oluşturdum ve her öğeye düğmenin adı olan bir dize anahtarı erişiyor. İskelet kodu:
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
Veri sayfasının resmi: – TWalker
Tamam ... resim ekleyemiyorum. Fakat 8 farklı görev için görev süresini kaydeden 8 veri sayfası var (başlangıç zamanı ve son süre). Bu harika, ama aracın kullanılabilirliğini geliştirmem gerekiyor. Bu nedenle, her makroyu başlatmak/durdurmak için düğmelerle birlikte bir çalışma sayfam olmasını isterim, ancak tek tek çalışma sayfalarında hala çalışacak makroya ihtiyacım var. Umarım bu biraz daha nettir. – TWalker