返回列表 上一主題 發帖

[發問] 請問如何將以連接EXCEL的DDE數據每分鐘紀錄下來?

[發問] 請問如何將以連接EXCEL的DDE數據每分鐘紀錄下來?

板主,各位前輩大家好

其實這個問題,我之前已經在舊論壇拜讀過相關文章,尤其是jimmy大的那篇經典文章
因為小弟本身的做法和看盤軟體(我是用yeswin)跟之前jimmy大的不一樣
所以我把GBKEE大分享的程式碼稍微改了一下,可是還是不能用....故想請問GBKEE大,我該怎麼改才可以使用

請先讓我簡單說明我的設定:
1.小弟是先將所有我需要的資料(期權)全部都先集中在一個工作表(sheet 1)中(這可能跟其他前輩不一樣)
2.再挑出我今天關注的某一檔(比如說大台),再將大台的相關資訊指向第二個工作表(sheet 2)
3.我希望能將大台的每一分鐘資料都紀錄在sheet 2裡

也就是說,我不是直接紀錄DDE回傳的資料,我是紀錄sheet 1中資料格的變動,
所以我將GBKEE大的程式碼download改成了change,可是還是不能用....可否請問GBKEE大,我該怎麼改才可以使用?

請查閱我附上的檔案,感謝各位

DDE(Yeswin).xls.zip (25.87 KB)

我愛麻辣家族討論區!!

回復 55# j1221


    這個檔案的程式, 只有第一根(8:50) 的最高、最低是正確的;

8:55分開始, 最高、最低都是當日的最高、最低, 不會再改變....................

目前只有紀錄下第5分K時的狀態。

請問有正確完整狀版,可以參照嗎?  感謝!

TOP

Sheets("TXF").[AC7:AL100] = ""
'    Sheets("Stock").[I7:AG100] = ""
'   'Sheets("TWO").[B7:S19000] = ""
程式碼中, 你砍了Stock 及TWO 的活頁簿; 清空資料會出現問題

TOP

回復 52# GBKEE

GBKEE 大,抱歉又來麻煩你。之前向你請教的「每五分鐘紀錄一次數據」的檔案,我使用上一直沒有問題。

但是我之前都是在開盤後,才有時間把excel打開,使用上沒有問題。

但這兩天,我都在盤前(約8:30)的時候打excel打開,但每到了8:40(我有改變了紀錄的時間,希望從8:40開始),就會跳出「沒有設定物件變數或 With 區塊變數」的訊息。

我找了半天,都沒有發現問題(因為我基本上沒有更動之前的範例,只是多增加了幾個其他資料格,時間序列也沒有問題),可否請你幫忙看看?

煩請參閱附檔,謝謝你!

TWT.rar (127.35 KB)
我愛麻辣家族討論區!!

TOP

回復 50# c_c_lai

謝謝c_c_lai 大!又多學了一招!
我愛麻辣家族討論區!!

TOP

本帖最後由 j1221 於 2014-2-5 20:08 編輯

回復 52# GBKEE


真的耶,我重新開啟之後就一切正常了....感謝GBKEE大~~:D

TOP

回復 51# j1221
沒有這問題 上傳你的檔案看看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 j1221 於 2014-2-5 19:05 編輯

回復 49# GBKEE



感謝GBKEE大,可以用了!!:D

只是有一個問題,excel在填入資料時,一次會填入當前儲存格和下一格(比如說目前是18:45,它會同時填入18:50和18:45),請問為什麼會這樣呢?(煩請見下圖)

我愛麻辣家族討論區!!

TOP

回復 48# j1221
以 "TXF1" 為例:
  1.     With Sheets("TXF1")
  2.         Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), Second(Time)), LookIn:=xlFormulas)
  3.         Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  4.     End With
  5.     Rng.Value = Sheets("Main").Range("C9:M9").Value
複製代碼
建議修改為:
  1.     With Sheets("TXF1")
  2.         Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), Second(Time)), LookIn:=xlFormulas)
  3.         If Not TimeRange Is Nothing Then
  4.             TimeRange.Offset(, 1).Resize(, 11) = Sheets("Main").Range("C9:M9").Value
  5.         End If
  6.     End With
複製代碼
Range.Find() 會試圖找到該項資訊的第一個儲存格,如果沒有找到符合的儲存格,
則此方法 "傳回値" 會傳回 Nothing。
當 TimeRange 值為 Nothing, 你原本的寫法則會出錯。

TOP

本帖最後由 GBKEE 於 2014-2-5 16:58 編輯

回復 48# j1221
因程式的 FIND 的時間 不一定落在00,05,10,15....分鐘的時間上
導致工作表A欄FIND不到而造成錯誤
  1. Dim xTime As String  '宣告為字串型態 僅ThisWorkbook模組的程序可用
  2. Private Sub Workbook_Open()
  3.     Sheets("TXF1").[B7:P19000] = ""
  4.     Sheets("MXF1").[B7:P19000] = ""
  5.     Sheets("EXF").[B7:P19000] = ""
  6.     Sheets("FXF").[B7:P19000] = ""
  7.     Sheets("TWT").[B7:P19000] = ""
  8.     Sheets("TWO").[B7:P19000] = ""
  9.     If Time >= TimeValue("08:45:00") And Time <= TimeValue("13:45:00") Then
  10.         '*** 營業時間內 不一定在 00,05,10,15....的分鐘上  ******
  11.         xTime = Minute(Time) - Minute(Time) Mod 5       '落在上一個 5分鐘 ,Mod:兩數相除的餘數
  12.         xTime = Format(TimeSerial(Hour(Time), xTime, 0), "h:mm:ss")
  13.         change
  14.     Else
  15.         xTime = "08:45:00"
  16.         Application.OnTime TimeValue(xTime), "ThisWorkbook.change"
  17.     End If
  18. End Sub
  19. Private Sub change()
  20.     Dim TimeRange As Range, Rng As Range, R As Range
  21.     ' ***  Time 時間點不一定落在5分鐘上 ********
  22.     'xTime為落在 00,05,10,15....的分鐘上的時間,可確定一定找得到
  23.     Set TimeRange = Sheets("TXF1").[A:A].Find(xTime, LookIn:=xlValues)  '改為 搜尋內容
  24.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  25.     Rng.Value = Sheets("Main").Range("C9:M9").Value
  26.    
  27.     Set TimeRange = Sheets("MXF1").[A:A].Find(xTime) '接下的Find會依據上一次Find的選項來搜尋
  28.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  29.     Rng.Value = Sheets("Main").Range("C11:M11").Value
  30.    
  31.     Set TimeRange = Sheets("EXF").[A:A].Find(xTime)
  32.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  33.     Rng.Value = Sheets("Main").Range("C12:M12").Value
  34.    
  35.     Set TimeRange = Sheets("FXF").[A:A].Find(xTime)
  36.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  37.     Rng.Value = Sheets("Main").Range("C13:M13").Value
  38.    
  39.     Set TimeRange = Sheets("TWT").[A:A].Find(xTime)
  40.     Set Rng = TimeRange.Offset(, 1).Resize(, 17)
  41.     Rng.Value = Sheets("Main").Range("C2:U2").Value
  42.    
  43.     Set TimeRange = Sheets("TWO").[A:A].Find(xTime)
  44.     Set Rng = TimeRange.Offset(, 1).Resize(, 20)
  45.     Rng.Value = Sheets("Main").Range("C3:U3").Value
  46.    
  47.     If Time > TimeValue("13:45:00") Then Exit Sub
  48.    
  49.     xTime = Minute(Time) + 5 - Minute(Time) Mod 5               '落在下一個5分鐘
  50.     xTime = Format(TimeSerial(Hour(Time), xTime, 0), "h:mm:ss") '落在 00,05,10,15....的分鐘的時間上
  51.     ' Now + TimeValue("00:05:00") ->不一定是落在 00,05,10,15....的分鐘上
  52.     Application.OnTime TimeValue(xTime), "ThisWorkbook.change"  '確實在下一個5分鐘點上執行
  53. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題