返回列表 上一主題 發帖

[分享] 盤中 DDE 存檔與 VBA 的實際應用範例

我差點忘了與我擁有小學生等級的同學們是無法下載附件的,
所以我又將它直接貼了出來,方便大家閱覽。
  1. ' 盤中 DDE 存檔的實際應用範例

  2. Option Explicit

  3. Dim actEnabled As Boolean
  4. Dim index As Single

  5. Private Sub Workbook_Open()
  6.     If (Sheets("工作表1").Range("AA1").Value = "") Then Sheets("工作表1").Range("AA1").Value = "08:45:00"   ' 假設AA1欄位為空白,則寫入開盤起始時間
  7.     If (Sheets("工作表1").Range("AA2").Value = "") Then Sheets("工作表1").Range("AA2").Value = "13:45:59"   ' AA2欄位亦同。(此兩欄紀錄起始終止時間)
  8.     If (Sheets("工作表1").Range("AA3").Value = "") Then Sheets("工作表1").Range("AA3").Value = 0            ' 紀錄最後資料匯入之列號 (Rows)。
  9.     If (Sheets("工作表1").Range("AA4").Value = "") Then Sheets("工作表1").Range("AA4").Value = "00:00:10"   ' 紀錄資料匯入相隔時間,如每隔十秒寫入一次。

  10.     If (TimeValue(Now) > Sheets("工作表1").Range("AA2").Value) Then       ' 如果目前時間業已超過AA2的時段,則呼叫.......
  11.         Call stopProcedure
  12.     Else                                                                  ' 反之,則呼叫.......
  13.         Call startProcedure
  14.     End If
  15. End Sub

  16. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  17.     On Error Resume Next
  18.     Call actStop
  19. End Sub


  20. Private Sub startProcedure()       ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
  21.     Call actStart
  22. End Sub

  23. Private Sub stopProcedure()        ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
  24.    Call actStop
  25. End Sub

  26. Sub Starter()
  27.     If (actEnabled = True And TimeValue(Now) >= Sheets("工作表1").Range("AA1").Value And TimeValue(Now) <= Sheets("工作表1").Range("AA2").Value) Then
  28.         index = Sheets("工作表1").Range("AA3").Value

  29.         If (Index = 0) Then Call newTitle  '假設newTitle程序(由使用者自行定義)是將第一列的資料抬頭名稱寫入到工作表2。 如:日期、時間、R1C5的對應欄位資料等。

  30.         Sheets("工作表1").Range("AA3").Value = index + 1       ' 紀錄列號加一。
  31.         Sheets("工作表2").Cells(index + 2, 1).Value = Date
  32.         Sheets("工作表2").Cells(index + 2, 2).Value = TimeValue(Now)
  33.         ' Sheets("工作表2").Cells(index + 2, 3).Value = Sheets("工作表1").Cells(1, 5).Value
  34.         '
  35.         ' 複製從券商DDE匯入之相對應位置資料,如 R1C5 對應的可能是收盤價等等。
  36.         '
  37.     End If
  38. End Sub


  39. Sub onStarter()
  40.     Call Starter
  41.     If actEnabled Then Call actStart
  42. End Sub

  43. Sub actStart()
  44.     actEnabled = True
  45.     Application.OnTime (Now + Sheets("工作表1").Range("AA4").Value), "ThisWorkBook.onStarter"   ' 寫入資料的排程 (目前是每隔十秒寫入一次)
  46. End Sub

  47. Sub actStop()
  48.     actEnabled = False

  49.     On Error Resume Next
  50.     Application.OnTime Now, "ThisWorkBook.onStarter", , False
  51. End Sub
複製代碼

TOP

        靜思自在 : 一句溫暖的話,就像往別人身上灑香水,自己會沾到兩三滴。
返回列表 上一主題