Board logo

標題: [發問] 用時間控制的程式,時間要跨過隔日的 VBA要如何寫? [打印本頁]

作者: ABK    時間: 2018-4-26 16:38     標題: 用時間控制的程式,時間要跨過隔日的 VBA要如何寫?

想要寫一支VBA  紀錄 台指期"日盤"和"午後盤" 的資料
午後盤時間這一段要跨到隔天早上,寫不出來,PO上來請教高人。

Sub 共用參照()
Set MyBook = ThisWorkbook
Set Sht1 = MyBook.Sheets("台指期")

If [A1] = "日盤" And Time >= TimeValue("08:44:00") And Time <= TimeValue("13:45:00")Then '依據儲存格A1的值為"日盤"或"夜盤"--> 選擇"日盤"
     StartTime = "08:44:10"   '日盤開盤前50秒-->執行程式
     EndTime = "13:45:10"     '日盤收盤後10秒-->停止程式
End If


If [A1] = "夜盤" And Time >= TimeValue("15:00:00") And Time <= TimeValue("05:00:00") Then  '選擇夜盤(15:00:00 ~ 隔日早上 05:00:00)

     StartTime = "14:59:10"  '夜盤開盤前50秒-->執行程式
     EndTime = "05:00:10"    '夜盤收盤後10秒-->停止程式

End If

End Sub
作者: jackyq    時間: 2018-4-26 17:37

If Now >= (Date + 0 + TimeValue("15:00:00")) And _
   Now <= (Date + 1 + TimeValue("05:00:00")) Then
   
   ...............
End If
作者: ABK    時間: 2018-4-26 23:05

本帖最後由 ABK 於 2018-4-26 23:09 編輯

回復 2# jackyq

我仿製了pcboy大 發問的文篇: "DDE每分鐘記錄的資料排序問題"  [ http://forum.twbts.com/thread-20603-1-1.html ] 裡面的程式碼。

將跨隔日的Code 寫入, 想做成可以跑台指"日盤"和"午後盤"每分鐘的紀錄,
停止時間那邊沒寫好, 按鈕啟動"自動記錄"後 , 沒有跑起來 !   一直卡在收盤時間。

-- A1格那邊可以選擇"日盤"或"夜盤" --
作者: 准提部林    時間: 2018-4-27 15:22

測看看:
[attach]28615[/attach]
作者: ABK    時間: 2018-4-27 17:58

回復 4# 准提部林


謝謝准堤大 !      只能說驚嘆,版面清爽有力,看起來很舒服!   

可否請教准堤大 資料是如何抓取的, 公式和程式裡都沒有看到任何資料源的呼叫,也不需要開卷商的軟體數值就會進來。

又這些數值看起來怪怪的,例如台指 、摩台和加權的值 , 還是說 A2:Q5那一區是假資料 用來測試紀錄的程式?
作者: 准提部林    時間: 2018-4-27 19:18

本帖最後由 准提部林 於 2018-4-27 19:20 編輯

回復 5# ABK


那是用亂數作為測試用, DDE公式得各人需求自行去寫~~~
主要是解決[日盤][夜盤]的問題!
作者: ABK    時間: 2018-4-28 20:34

本帖最後由 ABK 於 2018-4-28 20:41 編輯

回復 6# 准提部林


  謝謝准堤大 !       了解了!
有辦法避免 在已經停止紀錄了, 又去按一次"停止鍵"時 不會跑出錯誤訊息嗎?
但是再去按"執行紀錄" 和 "清除紀錄資料"鍵 還是可以繼續正常運作 !
作者: 准提部林    時間: 2018-4-28 21:02

回復 7# ABK

Sub 停止執行()
uMode = 0
Call 共用參照
Sht1.[O8] = "STOP"
On Error Resume Next
Application.OnTime Next_Time, "自動記錄", Schedule:=False
On Error GoTo 0
End Sub
作者: ABK    時間: 2018-4-29 00:01

回復 8# 准提部林


    謝謝准堤大!    OK了!
作者: ABK    時間: 2018-6-6 01:00

回復 4# 准提部林

准堤大您好 !
再請教一個問題, 如果在程式跑了一段時間後,我要清除紀錄,但是要保留最後一筆紀錄並讓它保留在第9行,清除資料的程式要如何改寫?
作者: 准提部林    時間: 2018-6-6 19:27

回復 10# ABK


Sub 清除記錄資料()
Dim xE As Range
If MsgBox("※確定要清除〔Sheet1〕的記錄嗎? ", 4 + 32 + 256) = vbNo Then Exit Sub
Call 共用參照
Set xE = Sht1.[a65536].End(xlUp)
If xE.Row <= 9 Then Exit Sub
Range(Sht1.[A9], xE(0)).EntireRow.Delete
If ActiveSheet.Name = Sht1.Name Then ActiveWindow.ScrollRow = 1
End Sub
作者: ABK    時間: 2018-6-6 23:31

回復 11# 准提部林


謝謝准堤大!     由於我預計在 N欄之後 加入一些表格,所以整列的刪除會 刪到N欄後面的資料。
我只要 A欄到N欄這一區塊的紀錄 刪除 , 保留最後一筆紀錄放到第9列 [A9:N9], 這一段要如何修正?
作者: 准提部林    時間: 2018-6-7 17:07

回復 12# ABK


Range(Sht1.[N9], xE(0)).Delete Shift:=xlUp
作者: ABK    時間: 2018-6-10 11:01

回復 13# 准提部林


   謝謝准提大!  
   再給我問一下!  (不好意思! 突然想到)
   如果區間是 D欄到N欄這一區塊的紀錄 要刪除 , 保留最後一筆紀錄放到第9列 [D9:N9], 又要如何寫?
   
不好意思!  想說以後寫程式會碰到不是從A欄開始的資料區, 先問起來放 !
作者: 准提部林    時間: 2018-6-11 15:03

回復 14# ABK


Set xE = Sht1.[a65536].End(xlUp) 改成D
作者: ABK    時間: 2018-6-17 01:47

回復 15# 准提部林

謝謝准提大!  
假設 我的即時資料是呈現在 C8: N8
我想要以後在同一張圖表上一起呈現"即時資料"與"紀錄資料",
也就是當我"清除紀錄資料"後,C9:N9的數值等於 C8:N8的數值(即時的),
在"執行紀錄"啟動後:
當第一分鐘結束時, 即時資料便記錄在C9:N9,且變成C10:N10與C8:N8 同步,
當第二分鐘結束時, 即時資料便記錄在C10:N10,且變成C11:N11與C8:N8 同步,
當第三分鐘結束時, 即時資料便記錄在C11:N11,且變成C12:N12與C8:N8 同步, ...............。
(也就是在紀錄資料區的最後一列與一直與即時數據同步)

一直到我再次"清除紀錄資料"時, 又變成C9:N9與C8:N8 同步了。
這樣的程式碼要如何寫 ?
作者: ABK    時間: 2018-7-31 22:20

已經解決了!




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