返回列表 上一主題 發帖

DDE資料抓取,逐格顯示問題

DDE資料抓取,逐格顯示問題

請問各位大大,
DDE中, 我需要每10分鐘抓取資料.
但要逐格顯示,
意思如下:
8:45期貨開盤....第一筆資料
8:55......第二筆資料
9:05......第三筆資料
.....以此類推.
檔案中,
Sheet1...是卷商DDE資料變動.
Sheet2...每十分鐘抓取資料.
這要如何寫呢?
Jackson

回復 1# jackson184
傳檔來試試

TOP

回復 2# GBKEE


    WMS-Test.rar (12.14 KB)

先感謝GBKEE幫忙,
檔案中有三個頁面,
第一頁: 我要觀查WMS指數.
第二頁:抓取第三頁卷商DDE回傳的數據, 需要逐格記錄90次. 每10分鐘抓取一次.
第三頁:卷商DDE數據.

很抱歉, VBA剛學習中, 看過各位討論, 還不太容易上手,
因為是小學生資格, 沒辦法下載檔案.

或者請GBKEE或各位大大給個方向, 我再慢慢學習, 再請各位檢查.

WMS-Test.rar (12.14 KB)

Jackson

TOP

回復 3# jackson184
如圖 插入一模組 將下列兩程序貼上

  1. Option Explicit             '在模組層次中強迫每個在模組裏的變數都必須明確的宣告。
  2. Dim Rng As Range            ' 通用於模組(Module) 內的私用變數
  3. Private Sub AUTO_OPEN()     '此巨集於檔案開啟時會自動執行
  4.     With Sheets("90")
  5.         .UsedRange.Offset(1).Clear                '清除 前一日的數據
  6.         Set Rng = .Range("A2:A31,F2:F31,K2:K31")  '數據傳回的區域,為多重範圍.
  7.     End With
  8.     If Time < TimeValue("08:45") Then             '早於開盤時間
  9.         Application.OnTime TimeValue("08:45"), "MyDee"    '設定於08:45 執行 MyDee 程序
  10.     ElseIf Time >= TimeValue("08:45") And Time <= TimeValue("13:30") Then '於交易時間內
  11.         MyDee                                     ' 執行 MyDee 程序
  12.     End If
  13. End Sub
  14. Private Sub MyDee()
  15.     Dim A As Integer, Ar(), R As Integer, C As Integer
  16.      If Time > TimeValue("13:30") Then Exit Sub     ' 收盤時間後 停止執行
  17.     A = Application.CountA(Rng)             '計算 (數據傳回的區域)有資料儲存格的總數
  18.     If A <= 29 Then C = A + 1               'C 為  數據傳回的區域的列位
  19.     If A Mod 30 >= 0 Then C = (A Mod 30) + 1
  20.     R = Int(A / 30) + 1                     'R 為多重範圍的第幾個範圍
  21.     With Sheets("連結")
  22.         Ar = Array(Now, A + 1, .Range("I2"), .Range("J2"))
  23.         'Ar 為取得  1. 時間, 2.項次,3.最高價 ,4,最低價  '找不到 ->  收盤價找不到
  24.         'Ar = Array(Now, A + 1, .Range("I2"), .Range("J2"), 收盤價 ) '有收盤價
  25.     End With
  26.     Rng.Areas(R).Cells(C).Resize(1, 4) = Ar
  27.     'Rng.Areas(R).Cells(C).Resize(1, 5) = Ar   '有收盤價
  28.     Application.OnTime Now + TimeValue("00:10"), "MyDee"  '設定 10分後 執行 MyDee 程序
  29. End Sub
複製代碼

TOP

請問這個例子要安裝什麼額外軟件才能運行?
80 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 GBKEE 於 2011-4-1 16:52 編輯

回復 5# FAlonso
樓主是用看盤軟體的
試試看,可選擇股票,10秒紀錄一次.

股票紀錄.rar (14.88 KB)

TOP

回復 6# GBKEE
謝謝回覆,不過有幾點問題
因為GBKEE大大沒有寫end if,讀起來有點不慣
程式是否指
  1. If Time > TimeValue("13:30") Then
  2. Exit Sub
  3. End If
  4. ...
  5. ...
  6. ...

  7. If InStr(.ResultRange.Rows(3).Cells(1), stockcode) = 0 Then  
  8. GoTo refresh_err:
  9. Else

  10. Application.EnableEvents = False

  11. Set myrange = mysheet.Range("a65536").End(xlUp).Offset(1).Resize(1, .ResultRange.Columns.Count - 1)
  12. myrange.Value = .ResultRange.Rows(3).Value

  13. Application.EnableEvents = True

  14. myrange.Select

  15. End If
  16. End With

  17. Application.OnTime Now + TimeValue("00:00:10"), "myprogram"

  18. exit sub   這個exit sub是對應什麼

  19. refresh_err:
  20. MsgBox "Stock " & stockcode & " cannot be found"

  21. End Sub
複製代碼
80 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 jackson184 於 2011-4-2 15:26 編輯

回復 4# GBKEE


    謝謝GBKEE大大,
因為我還是小學生,
還不能下載您的範例.
我再試看看, 不懂再請教您.
Jackson

TOP

回復 8# jackson184
依圖片在你excel的 vba視窗 插入一模組
回到 論壇  如圖
  按下 「複製代碼」後會顯示 [代碼已複製到剪貼簿] 的信息 ,回到 vba視窗貼上即可





回復 7# FAlonso
If Time > TimeValue("13:30") Then
Exit Sub
End If
'''''''''''''''''''''''''''''''''''''''''
If Time > TimeValue("13:30") Then  Exit Sub
此為簡化 都是可達到一樣的效果

TOP

回復 9# GBKEE
謝謝
我另外在"紀錄"一頁加了以下程式
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Count > 1 Or Target.Address <> "$C$1" Then
  3. Exit Sub
  4. Else
  5. Sheet2.Range("A3:K65536").Clear
  6. myprogram  '和myDEE的程式一樣
  7. End If
  8. End Sub
複製代碼
原意是想當C1格子股票編號變動時,清空"紀錄"的資料以引入新股票訊息
有一點小問題,當該股票編號不存在時,會引發兩次"沒有該股票"的msgbox
理論上顯示msgbox後應該什麼也不動,不過程式卻額外連線至web,然後再執行msgbox
我用F8逐行程式執行也只顯示一次而已
不知有何解決法?
80 字節以內
不支持自定義 Discuz! 代碼

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題