返回列表 上一主題 發帖

[發問] 請問如何利用DDE提供的時間數據定期紀錄在excel活頁簿

[發問] 請問如何利用DDE提供的時間數據定期紀錄在excel活頁簿

在本論壇看到許多利用電腦系統時間來定期紀錄股市數據,目前使用Private Sub Worksheet_Calculate()接收數據,因為電腦系統時間與看盤軟體時間不一致。
如果想利用看盤軟體顯示在活頁簿上的時間例如094500、104500、114500、124500、134500等時間來記錄股價開盤、最高、最低、收盤,該如何利用巨集寫下來記錄。
謝謝各位耐心觀看發問。
人生只有三天,只有活在今天最踏實

回復 3# c_c_lai
謝謝owen06、C_C_Lai大大快速熱心回復,附上excel文件,昨晚寫的,因為不太會寫,所以請教這樣可以嗎?是否更有方便的判斷。
計算A02.rar (116.31 KB)
人生只有三天,只有活在今天最踏實

TOP

回復 6# c_c_lai
C_C_lai大大!
對不起忘記刪除5K相關敘述。
您提的方案是整除判斷餘數為零時,進行記錄。
我的問題是DDE數據連線進來,經過觀察有時不一定正點會有數據,所以不一定能整除,例如:09:44:58出現一比資料,然後在09:45:01才出現另一筆資料,這時前一小時的數據應該只到09:44:58必須完成統計。
才輸學淺,謝謝您耐心教導!
人生只有三天,只有活在今天最踏實

TOP

回復 8# c_c_lai
謝謝c_c_lai大大熱心指導!
人生只有三天,只有活在今天最踏實

TOP

回復 16# lawlu
lawlu大大,您寫的一開始時間限制
If Timer >= 31440 And Timer <= 49560 Then '早上8:44起至13:46止
如果你是在早上8:44前執行可能不會繼續執行程式了。

而且我不會這樣寫在cells(x,y)裡面用時間去計算下一行
  ActiveSheet.Cells(Int((Timer - 31440) / 60) + 4, 3).Value = Range("C2").Value '每60秒,往下一列, 填最新數值
    ActiveSheet.Cells(Int((Timer - 31440) / 60) + 4, 4).Value = Range("D2").Value '每60秒,往下一列, 填最新數值
    ActiveSheet.Cells(Int((Timer - 31440) / 60) + 4, 5).Value = Range("E2").Value '每60秒,往下一列, 填最新數值
    ActiveSheet.Cells(Int((Timer - 31440) / 60) + 4, 6).Value = Range("F2").Value '每60秒,往下一列, 填最新數值
    ActiveSheet.Cells(Int((Timer - 31440) / 60) + 4, 7).Value = Range("G2").Value '每60秒,往下一列, 填最新數值
建議你考慮用
Sheets("yyyyyy").[a65536].End(xlUp).Row
去檢查活頁簿最後一行來做記錄,yyyyyy代表活頁簿的名稱,a代表row的這一個行最後一個有記錄行號。
人生只有三天,只有活在今天最踏實

TOP

回復 16# lawlu
對不起超過3分鐘不能再修改帖子,另外你需要
把
Sub StartTimer()
  
'從啟動excel 開始的那一刻起, 在60-(timer  mod 60)秒 (為了切齊整秒) 後開始執行

   Application.OnTime Now + (60 - (Timer Mod 60)) / 86400#, "myPrg"
      
End Sub
放在ThisWorkbook
Sub Workboor_open()'這裡改一下紅色字
  
'從啟動excel 開始的那一刻起, 在60-(timer  mod 60)秒 (為了切齊整秒) 後開始執行

   Application.OnTime Now + (60 - (Timer Mod 60)) / 86400#, "myPrg"
     
End Sub
不知道這樣對嘛?我是參考論壇上面這樣做。
(60 - (Timer Mod 60)) / 86400#這樣寫我不懂,要問論壇高手。
我只會這樣寫
Application.OnTime "08:45:00", "myPrg"
您參考看看!
人生只有三天,只有活在今天最踏實

TOP

本帖最後由 barrykuo 於 2014-7-22 10:28 編輯

回復 19# lawlu
lawlu大大,大概懂你的意思了,有時間請多多查詢論壇上許多高手,我都是看他們的文章來學習的,雖然不是很懂。
你可以改寫成:
  1. Sub workbook_open()
  2. Application.OnTime TimeValue("08:44:00"), "myPrg"
  3. End Sub
複製代碼


然後把myPrg()改寫成:
  1. Sub myPrg()
  2.   If Timer <= 49560 Then Exit Sub '早上8:44起至13:46止
  3.     datarow = Sheets("yyyyyy").[c65536].End(xlUp).Row
  4.     ActiveSheet.Cells(datarow, 3).Value = Range("C2").Value '每60秒,往下一列, 填最新數值
  5.     ActiveSheet.Cells(datarow, 4).Value = Range("D2").Value '每60秒,往下一列, 填最新數值
  6.     ActiveSheet.Cells(datarow, 5).Value = Range("E2").Value '每60秒,往下一列, 填最新數值
  7.     ActiveSheet.Cells(datarow, 6).Value = Range("F2").Value '每60秒,往下一列, 填最新數值
  8.     ActiveSheet.Cells(datarow, 7).Value = Range("G2").Value '每60秒,往下一列, 填最新數值
  9.   End If
  10. Application.OnTime Now + TimeValue("00:01:00"), "myPrg"
  11. End Sub
複製代碼
datarow = Sheets("yyyyyy").[c65536].End(xlUp).Row裡面的yyyyyy填上你記錄的活頁簿名稱
然後再試試看應該可以執行了。
我可以跟你交換其他心得嘛?[email protected],謝謝
人生只有三天,只有活在今天最踏實

TOP

回復 21# lawlu
抱歉,end if 刪除。
人生只有三天,只有活在今天最踏實

TOP

回復 23# lawlu
lawlu大大,我按自己習慣改了程序,設定5秒記錄一次沒有問題,請再看看。

人生只有三天,只有活在今天最踏實

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題