返回列表 上一主題 發帖

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

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

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

我是一個業餘股票族,在網路上下載一些有關股票的Excel程式,總覺得不完全符合個人需求,所以有空我會修改或加強下載程式,供個人使用,但因怕觸犯智慧財產權,所以不敢送他人使用,也不敢在網路上公開.
Lin

TOP

1 在這網頁查詢股票的代號,InStr(.ResultRange.Rows(3).Cells(1), 代號), 為比對 匯入的資料是否包含股票的代號  當此函數為0 時表示沒有這個股票代號
2 不用static,就是會出現問題...
  不用static,可在模組最上方 Dim Run_Time As Date  設為 模組的私用變數.

TOP

回復 11# GBKEE
多謝解答,但為什麼要做這樣的動作?
(1) 當instr(........,代號) = 0,程式會跳到最後refresh_err而不會做成重新呼叫mydee,現在卻要特意叫停?
(2) static一字,表面看其實用和不用也沒分別. 因為重覆運行, run_time的值是now+timevalue("00:00:10"),完全不需繼承run_time之前的數值; 不重覆運行,便會是application ontime 0:00:00,mydee,,false,也不用前面的值. 但是不用static,就是會出現問題.
我的理解究竟那裡發生問題?
80 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 10# FAlonso
Private Sub MyDee()
    Dim Sh As Worksheet, Rng As Range, 代號 As String
    Static Run_Time As Date            'Static 陳述式宣告的變數,在程式執行期間,會一直保留內容
  ' If Time > TimeValue("13:30") Then Exit Sub     ' 收盤時間後 停止執行
    Set Sh = Sheets("紀錄")
    代號 = Sheets("紀錄").[C1]
    Sh.Activate
    With Sheets("匯入").QueryTables(1)
        .Connection = "URL;http://tw.stock.yahoo.com/q/q?s=" & 代號
       .Refresh False
        If InStr(.ResultRange.Rows(3).Cells(1), 代號) = 0 Then GoTo Refresh_Err:
       Application.EnableEvents = False
        Set Rng = Sh.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, .ResultRange.Columns.Count - 1)
        Rng.Value = .ResultRange.Rows(3).Value
        Application.EnableEvents = True
        Rng.Select
    End With
    Run_Time = Now + TimeValue("00:00:10")
    Application.OnTime Run_Time, "MyDee"  '設定 10秒後 執行 MyDee 程序
    Exit Sub
Refresh_Err:
    On Error Resume Next
    Application.OnTime Run_Time, "MyDee", , False  '清除先前設定的程序
    MsgBox "找不到 " & Sheets("紀錄").[C1] & " 股票"
End 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

回復 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

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

回復 4# GBKEE


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

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

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

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

股票紀錄.rar (14.88 KB)

TOP

        靜思自在 : 時時好心就是時時好日。
返回列表 上一主題