Board logo

標題: VBA的 DDE 函數 抓取 [打印本頁]

作者: Scott090    時間: 2017-9-22 14:23     標題: VBA的 DDE 函數 抓取

本帖最後由 Scott090 於 2017-9-22 14:26 編輯

懇請協助如何正確取得資料

看盤軟體打開,儲存格放入 DDE公式是可以取得資料的。
希望用DDE函數來做這一件事,但沒能如願,
如下的程式:
1. Application.DDEInitiate("EWinner", "RQ") 可以打開DDE通道
2. returnList = Application.DDERequest(ChannelNum, "'100000.Open'") 透過通道送出 item  '100000.Open'
    就無法取得資料; returnList 內是字串 "錯誤 2023"
  1. ''DDE格式:ServerName|Topic!Item
  2. ''儲存格內公式
  3. ''開盤價:=EWinner|RQ!'100000.open'
  4. ''最高價:=EWinner|RQ!'100000.high'
  5. ''最低價:=EWinner|RQ!'100000.low'
  6. ''成交價:=EWinner|RQ!'100000.price'
  7. ''
  8. Sub DDELinkTest()
  9.    
  10.     Dim ChannelNum As Long
  11.     Dim i%, j%
  12.     Dim returnList
  13.         
  14.     '建立DDE連結通道
  15.     'DDEInitiate(AppName, Topic)
  16.     Do
  17.         ChannelNum = Application.DDEInitiate("EWinner", "RQ") '點金靈的AppName:EWinner、Topic:RQ
  18.         i = i + 1
  19.     Loop While i < 50 And ChannelNum = 0    '確認已建立通道
  20.    
  21.     If ChannelNum <> 0 Then
  22.         'DDERequest(channel, item), item = stockNumber 100000.Open 測試大盤 100000 開盤價
  23. '         儲存格內公式 "=EWinner|RQ!'100000.open'"
  24.             returnList = Application.DDERequest(ChannelNum, "'100000.Open'")
  25. ''
  26.             On Error GoTo ErrorHand
  27.             '取得該項目的資料內容
  28.             For j = LBound(returnList) To UBound(returnList)
  29.                 ActiveSheet.Cells(75, i + 1).Formula = returnList(j)
  30.             Next
  31.         
  32.     End If
  33.         
  34. ErrorHand:
  35.     On Error GoTo 0
  36.     '關閉DDE連結通道
  37.     Application.DDETerminate ChannelNum
  38. End Sub
複製代碼

作者: kingmvp    時間: 2017-10-25 16:09

本帖最後由 kingmvp 於 2017-10-25 16:11 編輯

回復 1# Scott090
Scott090大你好....
第24行---> returnList = Application.DDERequest(ChannelNum, "'100000.Open'")
把單引號拿掉看看....如下.....
returnList = Application.DDERequest(ChannelNum, "100000.Open")
另外....如果真的不行....不妨先試試小弟有一帖發文裡附的檔案..用它再來更改Scott090大附的程式碼......
http://forum.twbts.com/viewthread.php?tid=20214
but....小弟附的那個檔案....它抓的到data....但....會漏筆....(小弟也有發文請教....不過尚未有前輩指點....T__T)
作者: Scott090    時間: 2017-10-26 21:56

回復 2# kingmvp


    謝謝kingmvp兄的回應
Application.DDERequest(ChannelNum, "'100000.Open'")
改成   Application.DDERequest(ChannelNum, "100000.Open") 還是不行 "錯誤 2023"

不知是否 Ewinner這個看盤程式的溝通問題;不過用相同的格式公式直接放到 儲存格內是可以的
作者: kingmvp    時間: 2017-10-27 08:23

回復 3# Scott090
Scott090大你好....要判定是否為Ewinner溝通問題....直接試試小弟上面提的檔案(壓縮檔裡的excel)...把它替換成Ewinne的連結.....
如果一樣有問題的話....那就確定是Ewinner代碼沒弄好....這樣比較快知道是哪裡出了問題....
以上提供給Scott090大參考.....
作者: Scott090    時間: 2017-10-30 17:12

回復 4# kingmvp


    從新如所建議,還是不能用
假如有誰剛好也是用點金靈的話也可試試看

謝謝
作者: jackyq    時間: 2017-11-4 15:01

是 Application.DDERequest 自身的問題




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