返回列表 上一主題 發帖

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

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

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

回復 1# barrykuo


    用application.ontime可以達成你要的功能,但能否附個檔,show出你的表格內容,以便大家幫你設定。

TOP

回復 1# barrykuo
"如果想利用看盤軟體顯示在活頁簿上的時間例如094500、104500、114500、124500、134500等時間來記錄股價開盤、最高、最低、收盤,該如何利用巨集寫下來記錄。"
判斷時間 (Time) 改以判斷『看盤軟體顯示在活頁簿上的時間』便行了。

TOP

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

TOP

本帖最後由 c_c_lai 於 2014-7-2 10:56 編輯

回復 4# barrykuo
你試著將
  1.     If oneH >= 1 Then
  2.         MsgBox "I got it!"      '  你欲寫入的資料內容
  3.     End If      
複製代碼
換成這個測試例子,試著改成你所要的間距時段:
  1. Sub Ex()
  2.     Dim MyStr
  3.    
  4.     '  設定時間格式為 HH:MM:SS
  5.     MyStr = Format(Sheets("即時指數").Range("C3"), "00:00:00")

  6.     '  此例為每隔 5 分鐘執行一次 (5 x 60)
  7.     If (Minute(MyStr) * 60 + Second(MyStr)) Mod 300 = 0 Then
  8.         MsgBox "I got it!"
  9.     End If
  10. End Sub
複製代碼
如此便成了你所要的關鍵性內容了。

TOP

回復 4# barrykuo
又、計算A02.rar 一開啟會有錯誤訊息
是因為你少建立一個工作表單 "5K"。

TOP

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

TOP

回復 7# barrykuo
那只好配合實際發生的數據去機動判斷了。

TOP

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

TOP

大家好,我有跟barrykuo大大有相同的問題,就是想擷取DDE的"整時"資料( ex :00:01:00、00:02:00....)
,因為我對VBA沒有基礎,只是爬文抓適用程式來修改。但在整時資料擷取上仍無法獲得解決。
目前我把
Application.OnTime Now + TimeValue("00:00:0" & 59 - Second(Time) Mod 1), "自動記錄"   '每1分鐘遞迴一次
修改成這樣,但在記錄資料時,無法得到"準時"記錄,還出現1分內記錄2次、或者隔了幾分都沒動靜....。

因為我的權限不能下載barrykuo大大程式來比較,所以咧出我的程式,請教各位前輩如何解決。
Public uMode&, StartTime, EndTime

Sub 共用參照()
StartTime = "08:29:30"  '開盤時間(提早十秒開始,才可記錄開盤量價)
EndTime = "23:59:59"    '測試時間使用
End Sub

Sub 自動記錄()
Dim MyBook As Workbook, MySht As Worksheet, xEnd As Range
'--------------------------------------------------------------------------
If uMode = 0 Then Exit Sub
If Time > TimeValue(EndTime) Then Exit Sub '收盤時間以後不執行
Set MyBook = ThisWorkbook
Set MySht = MyBook.Sheets("DDE")
'讓程式只在本檔案的〔指定工作表〕中執行,否則會將資料寫到其它工作表
MySht.Range("AA6") = Time '當前時間(時間碼表)
'----------------------------------------------------------
If Val(MySht.Range("AA11").Value) > 0 Then
   Set xEnd = MySht.Range("A65536").End(xlUp)(2)
   If xEnd.Row < 12 Then Set xEnd = MySht.Range("A12")
   MySht.Range("A11:Z11").Value = MySht.Range("A6:Z6").Value
   xEnd.Resize(1, 26).Value = MySht.Range("A2:Z2").Value
   xEnd(1, 27).Value = Time
   '------------------------------------------------
   If ActiveSheet.Name = MySht.Name And xEnd.Row > 20 Then
      ActiveWindow.ScrollRow = xEnd.Row - 8 '讓最新資料保持在可見視窗中
   End If
   ThisWorkbook.Save   '存檔
End If
'----------------------------------------------------------
'每一分遞迴一次
Application.OnTime Now + TimeValue("00:00:0" & 59 - Second(Time) Mod 1), "自動記錄"
End Sub

Sub 開始執行()
Call 共用參照
uMode = 1
Call 自動記錄
End Sub

Sub 停止執行()
uMode = 0
End Sub

TOP

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題