2016-04-12 129 views
1

我在多個相同的工作表上有一個計時器宏。我的用戶將完成任務時間,每個工作表代表不同的任務。我需要一個彙總表,其中包含啓動和停止時間的宏,這些宏可鏈接到每個工作表,以便我的用戶不必在表單之間來回切換以啓動每個任務的定時器。你能幫我嗎。這是我正在使用的計時器代碼。它適用於每個工作表,但我不知道如何編寫摘要工作表上的按鈕以在特定的工作表上激活此代碼。下面的代碼:多個工作表上的宏:需要彙總工作表以控制其他工作表上的宏

Sub startStopTimer() 

If Range("j4") = "Start" Then 
    Range("$b$8").Offset(Range("j6") + 1).Value = Now 
    Range("j4") = "Stop" 
Else 
    Range("$b$8").Offset(Range("j6"), 1).Value = Now - Range("$b$8").Offset(Range("j6")) 
    Range("$j$4") = "Start" 
End If 

末次

+0

以下是數據表的圖片: – TWalker

+0

好的...無法添加圖片。但是我有8個數據表,記錄了8個不同任務的任務時間(開始時間和最終持續時間)。這很好,但我需要提高該工具的可用性。所以,我希望有一個帶有按鈕的工作表來啓動/停止每個宏,但是我需要宏仍然在各個工作表上運行。我希望這個更清楚一點。 – TWalker

回答

0

我不知道你需要打電話給你計時程序中的每個工作表。你真的只需要一個例程和知道哪個工作表來分配時間。

一種方法是使用UserForm上的一種按​​鈕控制面板。它看起來是這樣的(僅3個工作表爲例):

enter image description here

然後,你的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 
相關問題