返回列表 上一主題 發帖

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

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

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

barrykuo大大

依建議修改後,已經可以run了
謝謝您

TOP

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

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

TOP

barrykuo大大:

1. 已將end if 刪除
2.程式是沒有出現錯誤訊,但還是沒有紀錄資料
3.不知是否因您之前有提到datarow = Sheets("yyyyyy").[c65536].End(xlUp).Row裡面的yyyyyy填上你記錄的活頁簿名稱

而我將檔名設為"EURO", 所以我將yyyyyy填上EURO,也就是說如下:

datarow = Sheets("EURO").[c65536].End(xlUp).Row

才造成無法RUN程式

感謝回復

TOP

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

TOP

Barry 大大您好:

依照您的建議修改如下
但卻跑出錯誤訊息



[attachimg]18740

Error.png (56.23 KB)

Error.png

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

感謝barrykuo大大的回覆,小弟其實完全不懂VB,只是剛好爬文有看到他人寫好一個可用的程式,並稍微修改如我上面PO的程式內容,我是想將從券商的看盤軟體所接收到的DDE資訊如下,即時從08:45:00這一個時間點開始記錄,但是08:45無法成功,而08:46就可以了

時間                成交           買賣口差        筆差        盤差        盤比差%
13:44:59        9,364             -956                 -57         -834         -1.06
                                       
                                       
8:45                                       
8:46                9,376            -1,004           87           814         42.94


您建議紀錄資料用以下的程式,但小弟不是很了解,可否建議有其他的參考範例呢
謝謝您
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

回復 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

        靜思自在 : 我們最大的敵人不是別人.可能是自己。
返回列表 上一主題