返回列表 上一主題 發帖

儲存不會自動停止,該怎麼改?

本帖最後由 ahsiek 於 2013-9-11 14:02 編輯

回復 20# GBKEE

To  GBKEE大大   檔案附上,謝謝。 數值記錄.rar (328.25 KB)

不過,CC工作表的內容是我剛剛測試10分鐘的結果,一小時的被我洗掉了。

TOP

回復 20# GBKEE

數值記錄1.rar (132.41 KB)   附檔有另存為97-2003版本,只是工作表上的格式都跑掉了。我試著把CC工作表修改成比較能看的樣子。
不過你看到的,應該都是一堆數字。

程式碼寫在模組 module3 裡面。

CC工作表的 A欄是 時間,複製B3-D3的值至E4-G4的儲存格裡,H5-M5有公式會自己算。
主要的問題是,我設定一個小時記錄一次,結果,在每一個小時裡,中間會又多一筆時間的資料。
可是我明明就沒有動其他的程式碼,只改時間而已。就是不了解為什麼會多存時間呢?

TOP

回復 22# ahsiek
因為原本code中stop的機制,不是立即停止的,而是下次排程的時間到了才去判斷到該變數,不讓它有再下一次的排程。
所以原本設1秒,只要按停止後的一秒內不再重新開始就不會有問題,而現在時間拉長的話就有問題了。。。

可以參考修改如下看看,mainFunc() 不變:
  1. Private gNextRunTime1 As Date
  2. Private gbIsRunning1 As Boolean

  3. Sub ButtonStart1()  '工作表開始按鈕
  4.   '防止多次啟動
  5.   If gbIsRunning1 = True Then
  6.     If MsgBox("已有存在的排程:" & gNextRunTime1 & ",是否取消該排程,重新紀錄?", vbOKCancel) = vbOK Then
  7.       ButtonStop1
  8.     Else
  9.       Exit Sub
  10.     End If
  11.   End If
  12.   
  13.   With ActiveSheet
  14.     .Range("A4:G270").ClearContents
  15.     gbIsRunning1 = True
  16.     SetTimer1 .Name
  17.   End With
  18. End Sub

  19. Sub ButtonStop1()   '工作表停止按鈕
  20.   gbIsRunning1 = False
  21.   
  22.   On Error Resume Next
  23.   '取消下次執行時間
  24.   Application.OnTime gNextRunTime1, "'SetTimer1 """ & ActiveSheet.Name & """'", , False
  25.   On Error GoTo 0
  26. End Sub

  27. Sub SetTimer1(sSheetName As String)
  28.   Const MAX_ROW = 270
  29.   
  30.   gNextRunTime1 = Now + TimeValue("00:00:10")
  31.   Application.OnTime gNextRunTime1, "'SetTimer1 """ & sSheetName & """'"
  32.   
  33.   If mainFunc(sSheetName) >= MAX_ROW Then ButtonStop1 '執行並回傳row
  34. End Sub
複製代碼

TOP

回復 22# ahsiek
還是一樣沒程式碼,23#  stillfish00 的修正可以就好 ,如不行可將所有模組匯出後再上傳模組檔.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 23# stillfish00


To stillfish00 大大,非常謝謝你,也讓我知道是什麼原因造成的。我剛剛測試了一個小時,到目前為止都沒有問題出現。

真的真的很謝謝你,這下我也學會另一個方式。

TOP

回復 24# GBKEE


    To GBKEE 大大,也謝謝你的幫忙。但是我開啟97-2003版本的,進去VBA裡也是看得到模組裡的程式耶
    我不大會將2010和2003做轉換,或許就是這樣讓你看不到,真的很抱歉。
    不過,程式碼已經有解決了,也很謝謝你。

TOP

回復  ahsiek
因為原本code中stop的機制,不是立即停止的,而是下次排程的時間到了才去判斷到該變數,不讓 ...
stillfish00 發表於 2013-9-11 17:14


我想請問一下,CC 工作表,我只會拿來儲存數據,我都在其他工作表上工作 。
若我在其他的工作表上,若有做加減乘除或是改換函數時,CC 工作表就會漏了幾秒或是整個暫停住。
有沒有方法可以讓 CC 工作表不會因為其他工作表在工作而受到影響呢?
謝謝。
數值記錄.rar (333.3 KB)

TOP

回復 27# ahsiek
根據Application.OnTime ,其參數LatestTime 的說明:
  1. LatestTime 選用 Variant

  2. 可以開始執行程序的最晚時間。例如,假設 LatestTime 設為 EarliestTime + 30,當時間到了 EarliestTime 時,如果由於其他程序正在執行中而使 Microsoft Excel 不處於 [就緒]、[複製]、[剪下] 或 [尋找] 模式,則 Microsoft Excel 會等待 30 秒以完成第一個程序。如果 30 秒內 Microsoft Excel 無法回到 [就緒] 模式,則不會執行此程序。如果省略此引數,Microsoft Excel 會一直等到可以執行該程序為止。
複製代碼
由於省略此引數,Microsoft Excel 會一直等到可以執行該程序為止。
也許是這樣導致你紀錄時間的動作延後,而有你說的"漏了幾秒"的結果,這可能沒辦法解決。。。

但我會建議你試試看,紀錄的巨集用一個Excel應用程式常駐,如果有其他Excel 工作需要處理的話,
另外開一個Excel應用程式(從開始功能表或捷徑開啟excel,不要直接雙擊excel檔案,
使工作管理員可看見兩個Excel.exe處理程序),也許能避免資源衝突問題。

TOP

回復 28# stillfish00

謝謝 stillfish00大大的回應。

雖然CC工作表主要是作為儲存的工作表,但它儲存的數值的平均值,會連結到另一個工作表如DD工作表去使用
並且視情況在DD工作表裡做些變更,如加減乘除或是剪下貼上的動作。
如果是另開一個活頁簿的話,這樣儲存的數值就無法及時連結到我需要的工作表內(即,儲存格的及時連結是需要兩個活頁簿雙擊點開的)
那還有沒有其他方法可以做出同樣的碼表計時並儲存數據,卻又不會影響其他工作表運作的呢?
不好意思又麻煩你了,謝謝。

TOP

回復 29# ahsiek
這樣我就無能為力了。。。

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題