Board logo

標題: [發問] 請教使用yeswin RTD, 巨集開啟後資料就無法更新 [打印本頁]

作者: randychou    時間: 2013-1-4 11:46     標題: 請教使用yeswin RTD, 巨集開啟後資料就無法更新

請教各位前輩
小弟原先都是使用easywin 的DDE 資料 但非常的吃資源
最近發現元大的另一個軟體 Yeswin 有提供 RTD 的資料
於是我將原先的巨集稍作修改後
我主要是想要先把所有的資料記錄下來
所以我會去檢查時間變動的時候就複製到另一個分頁

在DDE的環境使用時都很正常,但當資料源換成RTD後,發現只要一開啟我的Macro 後
RTD的資料就不動了~
想請問各位前輩這個有辦法解決嗎?
是因為我的程式寫法不對嗎?

謝謝

大龍
[attach]13790[/attach]
作者: c_c_lai    時間: 2013-1-5 14:42

請教各位前輩
小弟原先都是使用easywin 的DDE 資料 但非常的吃資源
最近發現元大的另一個軟體 Yeswin 有提 ...
randychou 發表於 2013-1-4 11:46

Yeswin 報價元件(RTD) 是正常的,  =RTD("money.excel",,,$A$7,"Price")
你可以直接寫成  =RTD("money.excel",,"TXF1","Price")
試試看!
  1. Public turnKey As Integer

  2. Sub Macro_TX_DDE_COPY()
  3.     Dim nums As Integer
  4.    
  5.     nums = 20      '  20 秒 (預設值)
  6.    
  7.     turnKey = turnKey + 1
  8.     Sheets("DDE_DATA").[A5] = "( " & turnKey & " 秒 )"
  9.    
  10.     If (Second(Time) Mod nums) = 0 Then    ' 間隔 nums 秒
  11.        With Sheets("RECORD_TX")
  12.             If Not IsError(Sheets("DDE_DATA").[D2]) Then
  13.                 pos = .Range("A" & Rows.Count).End(xlUp).Row + 1
  14.                 .Cells(pos, 1).Resize(1, 9) = Sheets("DDE_DATA").Cells(2, 1).Resize(1, 9).Value
  15.                 turnKey = 0
  16.             End If
  17.         End With
  18.     End If
  19.    
  20.     Application.OnTime (Now + TimeValue("00:00:01")), "Module11.Macro_TX_DDE_COPY"
  21. End Sub
複製代碼

作者: randychou    時間: 2013-1-5 18:49

謝謝 c_c_lai 大 的解答. 週一再來試試看
很感謝
作者: c_c_lai    時間: 2013-1-6 08:18

回復 3# randychou
#2 樓程式碼只是單純讓你測試是否有資料錄實際寫入而已,
如果你要實際做盤中測試,則須加入開市、關市資訊,
則請改成如下:
  1. Public turnKey As Integer

  2. Sub Auto_Open()
  3.     If (TimeValue(Now) >= TimeValue("13:45:00")) Then      '  設定每日關市時間
  4.         Exit Sub
  5.     ElseIf (TimeValue(Now) <= TimeValue("08:45:00")) Then   '  設定每日開市時間
  6.         Application.OnTime (TimeValue("08:45:00")), "Module11.Macro_TX_DDE_COPY"
  7.     Else
  8.         '  系統剛連上 Yeswin報價元件(RTD) COM 機制,須有一個緩衝時段,這時如果馬上
  9.         '  去抓取資料,會有型態不符的錯誤訊息 (?無資料) 產生,並中斷執行序的作業。
  10.         Application.OnTime (Now + TimeValue("00:00:05")), "Module11.Macro_TX_DDE_COPY"
  11.     End If
  12. End Sub

  13. Sub Macro_TX_DDE_COPY()
  14.     Dim nums As Integer
  15.    
  16.     nums = 20      '  20 秒 (預設值)
  17.    
  18.     turnKey = turnKey + 1
  19.     Sheets("DDE_DATA").[A5] = "( " & turnKey & " 秒 )"
  20.    
  21.     If (Second(Time) Mod nums) = 0 Then    '  間隔 nums 秒,儲存一筆資料列
  22.        With Sheets("RECORD_TX")
  23.             If Not IsError(Sheets("DDE_DATA").[D2]) Then          '  避開型態不符的錯誤訊息
  24.                 pos = .Range("A" & Rows.Count).End(xlUp).Row + 1  '  往下加一筆資料列
  25.                 .Cells(pos, 1).Resize(1, 9) = Sheets("DDE_DATA").Cells(2, 1).Resize(1, 9).Value
  26.                 turnKey = 0  '  turnKey 值歸零
  27.             End If
  28.         End With
  29.     End If
  30.    
  31.     If (TimeValue(Now) <= TimeValue("13:45:00")) Then _
  32.         Application.OnTime (Now + TimeValue("00:00:01")), "Module11.Macro_TX_DDE_COPY"
  33. End Sub
複製代碼

作者: randychou    時間: 2013-1-7 09:31

呼呼!! 謝謝CC大 可以動了
另外有個小問題請教一下
我在run 巨集的時候 嘗試去開另外一個excel 就會出錯 "執行階段錯誤 9"
這個是不是EXCEL的限制呢?
作者: randychou    時間: 2013-1-7 10:24

錯誤是發生在
#4樓的 第24行
       With Sheets("RECORD_TX")
作者: c_c_lai    時間: 2013-1-7 12:40

本帖最後由 c_c_lai 於 2013-1-7 12:43 編輯
錯誤是發生在
#4樓的 第24行
       With Sheets("RECORD_TX")
randychou 發表於 2013-1-7 10:24

如果同時開啟一隻以上帶有VBA程式碼的 Excel 檔,常會碰到此類的情況,
這也可能是 Excel 的 BUG;亦即它們在處理巨集時,相互間錯亂抓錯堆疊
而發生誤判的錯誤,所以基本上如果我是在線上跑資料時,我僅只開啟一隻
Excel 程式,以免自己修理自己,沒事找渣。

P.S.  如要回復對方時,請禮貌上點按 "回復" 選紐,如此對方才知道你有回復他。
作者: randychou    時間: 2013-1-7 13:05

回復 7# c_c_lai

謝謝CC大!! 不好意思喔! 剛來沒多久沒注意到要按那邊回復,下次就知道了 ^^
剛剛這個問題 在網路上搜尋 有人提到說這種問題好像只能用VB.NET 之類的程式去重新改寫
我也不太清楚要怎麼弄! :lol
作者: c_c_lai    時間: 2013-1-7 13:16

回復  c_c_lai

謝謝CC大!! 不好意思喔! 剛來沒多久沒注意到要按那邊回復,下次就知道了 ^^
剛剛這個問題 ...
randychou 發表於 2013-1-7 13:05

C/C++,Pascal,VB/VB.Net 等編譯出來的執行碼均屬於機械碼
(Real Machine Code) , 而 VBA 是直譯碼 (Interpreter),兩者
是不同層次的編譯方式。而且 VBA 僅止於 Office。
作者: devidlin    時間: 2013-4-15 17:23

回復 2# c_c_lai
請教C大,
我開元大RTD報價元件,再開日盛鉅富贏家,奇怪  日盛鉅富贏家的DDE不會動,不知要如何解決?
作者: c_c_lai    時間: 2013-4-16 05:43

回復  c_c_lai
請教C大,
我開元大RTD報價元件,再開日盛鉅富贏家,奇怪  日盛鉅富贏家的DDE不會動,不知 ...
devidlin 發表於 2013-4-15 17:23

反過來你先開日盛鉅富贏家,再開元大RTD報價元件,試試看!
作者: devidlin    時間: 2013-4-16 17:57

回復 11# c_c_lai


    已經正常了,原來是excel信任中心的選項關閉中,將他啟用就正常了,謝謝。
作者: devidlin    時間: 2013-4-24 18:45

回復 2# c_c_lai
請教c大,
在excel  dde中,如何去抓大台,單量為10筆以上買進或賣出的tick,再用計數器作  加1或減1的動作, 謝謝。
作者: c_c_lai    時間: 2013-4-25 06:01

回復  c_c_lai
請教c大,
在excel  dde中,如何去抓大台,單量為10筆以上買進或賣出的tick,再用計數器作 ...
devidlin 發表於 2013-4-24 18:45

每家券商的DDE匯出均有其支援否與其自有規則,你可以先請教券商營業員。
只要它能允許該營業項目匯出至EXCEL,便可進行思考了!




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