Board logo

標題: [發問] 請教此程序如何改? [打印本頁]

作者: t8899    時間: 2013-10-9 11:40     標題: 請教此程序如何改?

本帖最後由 t8899 於 2013-10-9 11:47 編輯

Public Runtime
Sub a123()
If [U1] <> 1 Then
On Error Resume Next
Application.OnTime EarliestTime:=TimeValue(Runtime), _
    Procedure:="a123", Schedule:=False
  Exit Sub
On Error GoTo 0
End If
zzzzz
If Range("V14") = 1 Then mytime = "00:01:00"
If Range("V14") = 2 Then mytime = "00:02:00"
If Range("V14") = 3 Then mytime = "00:00:30"
If Range("V14") = 4 Then mytime = "00:00:15"
'--------------------------------------
Runtime = Now + TimeValue(mytime)
Range("I15").Value = Format(Runtime, "hh:mm:ss")

'------------------------------------------------------
Application.OnTime Runtime, "Sheet6.a123"
End Sub

---------------------------------------------------------------------

第一次執行
Runtime = Now + TimeValue(mytime)
Range("I15").Value = Format(Runtime, "hh:mm:ss")
之後皆為
Runtime = Range("I15").Value + TimeValue(mytime)
Range("I15").Value = Format(Runtime, "hh:mm:ss")
作者: GBKEE    時間: 2013-10-12 16:25

回復 1# t8899
試試看
  1. Option Explicit
  2. Public Runtime
  3. Sub a123()
  4.     Static Msg As Boolean
  5.     Dim mytime As String
  6.     If [U1] <> 1 Then
  7.         On Error Resume Next
  8.         Application.OnTime EarliestTime:=TimeValue(Runtime), _
  9.             Procedure:="a123", Schedule:=False
  10.         Exit Sub
  11.         On Error GoTo 0
  12.     End If
  13.    zzzzz
  14.     If Range("V14") = 1 Then mytime = "00:01:00"
  15.     If Range("V14") = 2 Then mytime = "00:02:00"
  16.     If Range("V14") = 3 Then mytime = "00:00:30"
  17.     If Range("V14") = 4 Then mytime = "00:00:15"
  18.     '--------------------------------------
  19.     With Range("I15")
  20.         If Msg = False Then
  21.             Msg = True
  22.             Runtime = Time + TimeValue(mytime)
  23.             .Value = Runtime
  24.             .NumberFormatLocal = "h:mm:ss;@"
  25.         Else
  26.             Runtime = .Value + TimeValue(mytime)
  27.             .Value = Runtime
  28.         End If
  29.     End With
  30.     '------------------------------------------------------
  31.     Application.OnTime Runtime, "Sheet6.a123"
  32. End Sub
複製代碼

作者: t8899    時間: 2013-10-13 09:58

本帖最後由 t8899 於 2013-10-13 10:08 編輯
回復  t8899
試試看
GBKEE 發表於 2013-10-12 16:25


謝謝指導,vb 正學習當中,多日無人回應,小弟想出的簡單的方法,提供參考
Public Runtime
Sub a123()
If Range("U1").Value <> 1 Then
On Error Resume Next
Application.OnTime EarliestTime:=TimeValue(Runtime), _
    Procedure:="a123", Schedule:=False
Cells(15, 9).Interior.ColorIndex = 2   '退出色彩還原
Range("u1").Value = 1
Range("z1").Value = 1
  Exit Sub
On Error GoTo 0
End If
zzzzz
If Range("V14") = 1 Then mytime = "00:01:00"
If Range("V14") = 2 Then mytime = "00:02:00"
If Range("V14") = 3 Then mytime = "00:00:30"
If Range("V14") = 4 Then mytime = "00:00:15"

If Range("z1").Value = 1 Then
Cells(15, 9).Interior.ColorIndex = 8     '執行中變色
Runtime = Now + TimeValue(mytime)
Range("I15").Value = Format(Runtime, "hh:mm:ss")
Range("z1").Value = 2  
Else
Runtime = Range("I15").Value + TimeValue(mytime)
Range("I15").Value = Format(Runtime, "hh:mm:ss")
End If
Application.OnTime Runtime, "Sheet6.a123"
End Sub
作者: t8899    時間: 2013-10-13 10:21

回復  t8899
試試看
GBKEE 發表於 2013-10-12 16:25


On Error Resume Next  =========>這句應可拿掉??
u1 不等於1 時並不等於"錯誤"??
作者: luhpro    時間: 2013-10-14 23:06

本帖最後由 luhpro 於 2013-10-14 23:14 編輯
On Error Resume Next  =========>這句應可拿掉??
u1 不等於1 時並不等於"錯誤"??
t8899 發表於 2013-10-13 10:21

On Error 像個切換開關,
意指之後遇到錯誤時該如何處理.

On Error Resume Next  是告訴系統 : 之後遇到錯誤時請忽略該錯誤, 從發生錯誤的下一行繼續執行下去.
所以它的作用範圍是直到下一次執行到 On Error ... 指令而變更了錯誤處理方式 或是 將檔案關閉 為止,
故而並不適合單純因為  u1 不等於1 時並不等於"錯誤"   這個因素而拿掉.


另你的程式中 On Error GoTo 0 因為是在 Exit Sub 之後, 所以永遠不會被執行到,
若希望它發揮作用應改放到 Exit Sub 之前.




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)