Board logo

標題: TimeValue(Now) = TimeValue 無法發事件?? [打印本頁]

作者: t8899    時間: 2013-6-28 19:05     標題: TimeValue(Now) = TimeValue 無法發事件??

工作表的calculate事件[attach]15336[/attach]
Private Sub Worksheet_Calculate()
If TimeValue(Now) = TimeValue("18:25:00 ") Then
[A2] = 1
End If
End Sub

我把時間改為目前時間(控制台的時間)加一分鐘, 等了一分鐘也沒反應?時間到了沒辦法觸發事件???
作者: sunnyso    時間: 2013-6-28 23:01

Sub Start_Timer()
    Application.OnTime Now + TimeValue("00:01:00"), "Sonny"
End Sub

Sub Sonny()
    Range("A2").Value = 1
End Sub
作者: t8899    時間: 2013-6-29 06:23

Sub Start_Timer()
    Application.OnTime Now + TimeValue("00:01:00"), "Sonny"
End Sub

Sub Sonny ...
sunnyso 發表於 2013-6-28 23:01

抱歉
測試過了, 一開檔還是沒辦法觸發,要執行Start_Timer(),才會觸發
觸發條件=>目前時間加1分鐘 等於執行Start_Timer後加1分鐘
1. 在Calculate 裡無法啟動Start_Timer ???
2. 我是要在固定的時間去做某事,所以"目前時間加1分鐘" ,不適合我用
作者: stillfish00    時間: 2013-6-29 09:21

本帖最後由 stillfish00 於 2013-6-29 09:24 編輯

回復 3# t8899
1#寫法的意思是當工作表的公式有重新計算時,才會去執行Worksheet_Calculate裡面的程式
他不是時時刻刻都檢查是否等於 TimeValue("18:25:00 "),檢查時的當下時間可能已經過了好幾秒,當然不會成立。


3#
一開檔還是沒辦法觸發,要執行Start_Timer(),才會觸發

這個你可以在一般模組內定義
  1. Sub auto_open()
  2.   Start_Timer
  3. End Sub
複製代碼
或ThisWorkbook內
  1. Private Sub Workbook_Open()
  2.   Start_Timer
  3. End Sub
複製代碼
都能讓開檔時自動執行Start_Timer


我是要在固定的時間去做某事,所以"目前時間加1分鐘" ,不適合我用

這才是你想解答的問題
如果是要開啟工作表後,希望某個時刻到達時就去做某件事
其實答案就在前面,你去查看Application.OnTime說明的話..
  1. Application.OnTime 方法
  2.     安排一個程序在將來的特定時間執行 (既可為某個日期的指定時間,也可為指定的時間之後)。
  3. 語法
  4.     運算式.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
  5.     運算式   代表 Application 物件的變數。
  6. 參數
  7.     名稱 必要/選用 資料類型 描述
  8.     EarliestTime     必要 Variant 想要執行程序的時間。
  9.     Procedure        必要 String 要執行的程序名稱。
  10.     LatestTime       選用 Variant 可以開始執行程序的最晚時間。例如,假設 LatestTime 設為 EarliestTime + 30,當時間到了 EarliestTime 時,如果由於其他程序正在執行中而使 Microsoft Excel 不處於 [就緒]、[複製]、[剪下] 或[尋找] 模式,則 Microsoft Excel 會等待 30 秒以完成第一個程序。如果 30 秒內 Microsoft Excel 無法回到 [就緒] 模式,則不會執行此程序。如果省略此引數,Microsoft Excel 會一直等到可以執行該程序為止。
  11.     Schedule           選用 Variant 若為 True,排程新的 OnTime 程序。若為 False,清除先前設定的程序。預設值為 True。
複製代碼
就可以知道這樣寫就好了
  1. Sub auto_open()
  2.   Application.OnTime TimeValue("18:25:00"), "Sonny"  'Sonny定義如2樓
  3. End Sub
複製代碼

作者: t8899    時間: 2013-6-29 10:18

本帖最後由 t8899 於 2013-6-29 10:29 編輯
1#寫法的意思是當工作表的公式有重新計算時,才會去執行Worksheet_Calculate裡面的程式
他不 ...
stillfish00 發表於 2013-6-29 09:21


我懂了
因為我的工作表,有抓股票行情, 儲存格會一直變動
我在測試時,已經收盤了.............
所以 If TimeValue(Now) = TimeValue("18:25:00 ") Then
應該也是沒問題的!
我下周一在測試看看, 謝謝
另外請教一下
If Format(Now, "hh:mm:ss") = "14:54:00" Then
[R31] = 1
及 SHEET1的R31=1  ===>此段的語法??
End If




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