我不知道你需要打電話給你計時程序中的每個工作表。你真的只需要一個例程和知道哪個工作表來分配時間。
一種方法是使用UserForm
上的一種按鈕控制面板。它看起來是這樣的(僅3個工作表爲例):

然後,你的UserForm
代碼中處理所有的點擊事件。在這個例子中,我創建了一個工作表集合,每個項目都由一個字符串鍵來訪問,該字符串鍵是按鈕的名稱。框架代碼將是:
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個不同任務的任務時間(開始時間和最終持續時間)。這很好,但我需要提高該工具的可用性。所以,我希望有一個帶有按鈕的工作表來啓動/停止每個宏,但是我需要宏仍然在各個工作表上運行。我希望這個更清楚一點。 – TWalker