2017-03-03 101 views
1

最近我設法找到一些關於用戶窗體上的定時器的代碼,我的問題是我需要保持定時器運行,即使用戶窗體或Excel文件是關閉...有人可以看看代碼並提供一些反饋?我的用戶表單是:optionsFormExcel VBA在用戶窗體或Excel關閉時保持用戶窗體定時器運行

Dim dteStart As Date, dteFinish As Date 
Dim dteStopped As Date, dteElapsed As Date 
Dim boolStopPressed As Boolean, boolResetPressed As Boolean 

Private Sub Reset_Timer_Click() 
dteStopped = 0 
dteStart = 0 
dteElapsed = 0 
Tech_Timer = "00:00:00" 
boolResetPressed = True 
End Sub 

Private Sub Start_Timer_Click() 
Start_Timer: 
dteStart = Time 
boolStopPressed = False 
boolResetPressed = False 
    Timer_Loop: 
      DoEvents 
      dteFinish = Time 
      dteElapsed = dteFinish - dteStart + dteStopped 
    If Not boolStopPressed = True Then 
     Tech_Timer = dteElapsed 
    If boolResetPressed = True Then GoTo Start_Timer 
    GoTo Timer_Loop 
Else 
    Exit Sub 
End If 
End Sub 

Private Sub Stop_Timer_Click() 
boolStopPressed = True 
dteStopped = dteElapsed 
End Sub 

Private Sub optionsForm_Initialize() 
Tech_Timer = "00:00:00" 
End Sub 
+1

只是一個想法 - 如果excel文件關閉,將表單的值保存在excel的單元格中,然後在打開時繼續。它會像這樣工作嗎? – Vityata

+0

葉,沒有問題....我可以創建和隱藏一個新的選項卡,sheet1爲... – EdN

回答

1

計時器的想法並不是它運行,而是它記住了一個時間點,並且可以給你在這一點和當前時刻之間的區別。如果你每秒鐘都在尋求這種差異,那麼它就會像手錶一樣運行。

像這樣的東西會是一個好的開始。在xl_main寫:

Option Explicit 

Dim dtime As Date 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Cells(1, 1).Value = dtime 
End Sub 

Private Sub Workbook_Open() 

    If Cells(1, 1).Value = 0 Then 
     dtime = Now 
    Else 
     dtime = CDate(Cells(1, 1)) 
    End If 

End Sub 

你可以玩它,讓它爲你想好。例如。你可能會找到一種方法來重置dtime或類似的東西。

+1

評論和重要的一段代碼,但我如何發佈它在用戶窗體中?我可以做些什麼:Tech_Timer = dtime? ,我的意思是,直接在用戶表單中的該標籤中? – EdN

+0

更多類似於'Tech_Timer = cdate(now-dtime)' – Vityata

+0

老實說,不知道如何插入你的代碼與我發佈的代碼... – EdN

0

這是不可能的,如果表單被卸載Unload optionsForm。但你可以試着用'optionsForm.hide()'關閉'表格,這個只隱藏表格,定時器應該繼續運行。

即使Excel關閉,計算從開始時間過去的時間的唯一方法是不將開始時間保存在變量dteStart中,而是保存在Excel單元格中。

+0

嗨,呃,是的,我目前有一個關閉按鈕,用於卸載它的用戶表單....將測試隱藏......如果我關閉了excel文件,它會繼續運行嗎? ....對,沒有工作... – EdN

+0

不!因此您需要使用Excel單元格來保存開始時間。 –

相關問題