返回列表 上一主題 發帖

[發問] 如何將EXCEL的即時資料定時複製到下方 (DDE)

回復 1# pipe
請參考:
關於盤中DDE紀錄

TOP

本帖最後由 c_c_lai 於 2012-5-31 20:33 編輯
回復  c_c_lai

CC大抱歉,我努力爬文也看完您的範例檔案,但真的無法對應修改成我自己的需求, 一竅不通阿 ...
pipe 發表於 2012-5-30 15:53

實在是真服了你,想想還是幫你寫好了。
  1. Option Explicit
  2. Dim timerEnabled As Boolean
  3. Dim Pos As Integer      ' 將每隔 "多少時間" 處理時段,移到此處來處理。

  4. Private Sub Workbook_Open()
  5.     Pos = Sheets("sheet1").Range("C" & Rows.Count).End(xlUp).Row
  6.     timerEnabled = False

  7.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart
  8. End Sub

  9. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  10.     On Error Resume Next
  11.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
  12.    
  13.     Me.Save
  14. End Sub

  15. Public Sub Timer()
  16.     On Error Resume Next
  17.     If (TimeValue(Now) > Sheets("sheet1").Range("AV2").Value) Then Exit Sub
  18.    
  19.     If (TimeValue(Now) >= Sheets("sheet1").Range("AV1").Value) Then         ' 開盤、收盤時段設定
  20.         ' 盤中處理,將資料匯入寫入工作表單內儲存。

  21.         With Sheets("sheet1")
  22.             Pos = Pos + 1                  ' 將變動行號加一行
  23.             
  24.             .Cells(Pos, 1).Value = Date     ' 日期
  25.             .Cells(Pos, 2).Value = Time     ' 時間
  26.             .Cells(Pos, 3).Resize(1, 12) = .Range("C8:N8").Value    ' 大均、大差、期均、期差、台指、高點、低點、中關、價差、振福、摩台、加權
  27.             
  28.             .Cells(2, 49).Value = Pos       ' AW2
  29.         End With
  30.     End If
  31.         
  32.     Call timerStart
  33. End Sub

  34. Sub timerStart()
  35.     If timerEnabled Then
  36.         Application.OnTime (Now + Sheets("sheet1").Range("AW1").Value), "ThisWorkbook.Timer"
  37.     Else
  38.         timerEnabled = True
  39.         
  40.         ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  41.         ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  42.         Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.Timer"
  43.     End If
  44. End Sub
複製代碼
剪下後直接貼入到 ThisWorkbook 程式區就 OK 了。

a.rar (74 Bytes)

TOP

回復 6# pipe
你的 "AV1"、以及 "AV2" 欄位不就已經載明了嗎?
本段程式它是可以由外部來控制的 (方便測試用),假設測試時間是在晚上八點到九點之間,是以每隔 20 秒寫入一筆資料,你便可以
這麼做,  將以下欄位內容異動成 (千萬不要加上 "" 符號,即直接打入 20:00:00、21:00:00、以及 00:00:20 等時間數據, 以此類堆):
AV1 = "20:00:00",AV2 = "21:00:00", AW1 = "00:00:20", 然後去再行測試答案即出!
寫程式要切記一點,千萬不要寫死程式,否則會成為一個掰腳仙!
My E-Mail:  [email protected]
你可以記檔案到此,謝謝!

TOP

回復 8# pipe
盤中測試
S.zip (13.96 KB)

TOP

回復 8# pipe
  1. Option Explicit
  2. Dim timerEnabled As Boolean

  3. Private Sub Workbook_Open()
  4.     timerEnabled = False

  5.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart
  6. End Sub

  7. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  8.     On Error Resume Next
  9.     Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.Timer", , False
  10.    
  11.     Me.Save
  12. End Sub

  13. Public Sub Timer()
  14.     Dim ws As Worksheet
  15.     Dim Pos As Integer      ' 將每隔 "多少時間" 處理時段,移到此處來處理。
  16.    
  17.     timerEnabled = True
  18.         
  19.     On Error Resume Next
  20.     Set ws = Sheets("工作表1")
  21.     If (TimeValue(Now) > ws.Range("I2").Value) Then Exit Sub
  22.    
  23.     If (TimeValue(Now) >= ws.Range("I1").Value) Then         ' 開盤、收盤時段設定
  24.         ' 盤中處理,將資料匯入寫入工作表單內儲存。

  25.         With Sheets("工作表2")
  26.             Pos = .Range("A" & Rows.Count).End(xlUp).Row + 1   ' 將變動行號加一行
  27.             
  28.             .Cells(Pos, 1).Value = Date        ' 日期
  29.             .Cells(Pos, 2).Value = ws.[B3]     ' 時間 (=DDEEXCEL|FUTURE!TXF16.時間)
  30.             .Cells(Pos, 3).Resize(1, 8) = ws.Range("B4:B11").Value    ' 市價    漲跌    漲跌幅  開盤價  最高價  最低價  累計交易量  乖離率
  31.         End With
  32.     End If
  33.         
  34.     Call timerStart
  35. End Sub

  36. Sub timerStart()
  37.     If timerEnabled = False Then
  38.         Application.OnTime (Now + Sheets("工作表1").Range("I1").Value), "ThisWorkbook.Timer"
  39.     Else
  40.         ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  41.         ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  42.         Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.Timer"
  43.     End If
  44. End Sub
複製代碼

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題