iInfo 資訊交流: Excel VBA 使用DDE函數抓取看盤軟體DDE數值

最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2017/02/20] 近來有網友詢問 MultiCharts 與 Excel 畫冰火能量圖 (8)MultiCharts 與Excel 畫冰火能量圖(11) --- 更名「台股儀表板」 文章中教學檔案取得方式,有興趣的朋友可透過 Line了解詳情 (請勿以為是免費分享),Line : aminwhite5168。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲,請盡快把握機會,歡迎券商、大專院校邀約講座。

[公告2018/06/01] 台指能量儀表板教學課程,課程如網頁內容 台北班:台指能量儀表板

2016年11月19日 星期六

Excel VBA 使用DDE函數抓取看盤軟體DDE數值

這幾天有個想法,就是在含有DDE的檔案上,在開啟檔案時則選擇不更新連結DDE,那後續又要讓Excel與DDE進行連結,有沒有什麼方法可以做到呢?答案是有,可藉由DDEInitiate、DDERequest、DDETerminate等函數就可以完成,以下就簡單說明相關內容。
開啟含有DDE檔案,會彈出一對話框,確認檔案是否做DDE更新連結,在按下不要更新後,Excel 就不會對DDE進行連結,但如果在檔案編輯完成後,需要再重新更新連結DDE,在不重新開啟檔案讓Excel自動做更新連結下,可以透過Excel VBA的函數來完成。

以凱基的HTS看盤軟體為例,讀著可以依照自己使用的看盤軟體為主,開啟凱基超級大三元DDE的內容。

選擇DDE項目。

傳送至Excel。

DDE格式:ServerName|Topic!Item
開盤價:"=TS|KS!TXFL6.130"
最高價:"=TS|KS!TXFL6.131"
最低價:"=TS|KS!TXFL6.132"
成交價:"=TS|KS!TXFL6.124"
接著將上述4個項目用Excel VBA來寫以下程式。
Sub DDE更新連結()
    Const c_strItem As String = "130, 131, 132, 124" '開盤價、最高價、最低價、收盤價
    Dim astrItem() As String
    Dim channel As Long
    Dim i As Integer, j As Integer
    Dim returnList
    
    '建立DDE連結通道,以超級大三元為例
    'DDEInitiate(AppName, Topic)
    channel = Application.DDEInitiate("TS", "KS") '超級大三元的AppName:TS、Topic:KS
    
    '確認通道建立
    If channel <> 0 Then
        '分割字串項目
        astrItem = Split(c_strItem, ", ")
        For i = LBound(astrItem) To UBound(astrItem)
            '指定欲查詢的項目
            'DDERequest(channel, item)
            returnList = Application.DDERequest(channel, "TXFL6." & astrItem(i))
        
            '取得該項目的資料內容
            For j = LBound(returnList) To UBound(returnList)
                Worksheets(1).Cells(1, i + 1).Formula = returnList(j)
            Next
        Next
    End If
    
    '關閉DDE連結通道
    Application.DDETerminate channel
End Sub
上面程式碼只是簡單的內容,後續可以延伸出很多應用的功能。

程式執行結果:

PS:此方法目前尚無法證明DDE是否會持續更新,需要即時接收變化,請讀者自行加入時間計時。

參考資料: