2016-04-12 11 views
1

Birden çok, aynı çalışma sayfası üzerinde bir zamanlayıcı makrosu var. Kullanıcılarım görev sürelerini zamanlayacak ve her çalışma sayfası farklı bir görevi temsil ediyor. Her bir çalışma sayfasına bağlı olan ve kullanıcıların her bir görev için zamanlayıcıları başlatmak için sayfalar arasında ileri ve geri gitmek zorunda kalmamaları için zamana başlatan makroları içeren bir özet sayfasına sahip olmam gerekiyor. Yardım edebilir misin. İşte kullanıyorum zamanlayıcı kodudur. Her çalışma sayfasında iyi çalışır, ancak bu kodu belirli bir çalışma sayfasında etkinleştirmek için bir özet çalışma sayfasında düğmelerin nasıl kodlanacağını bilmiyorum.Çoklu çalışma sayfalarında makro: Diğer sayfalardaki makroları denetlemek için özet çalışma sayfası gerekir

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 

End Sub

+0

Veri sayfasının resmi: – TWalker

+0

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

cevap

0

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.

enter image description here

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 
İlgili konular