返回列表 上一主題 發帖

[發問] 關於盤中DDE紀錄

回復 4# c_c_lai
因為vba放在模組故
Application.OnTime (Now + Sheets("DATA").Range("Y5").Value), "onStarter"  
且           ' Sheets(Sheet1).[A65536].End(xlUp).Offset(1).Resize(, 22) = Sheets("DATA").[A2:V22].Value  換成
Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, 22) = Sheets("DATA").[A2:v2].Value
2007 可執行

' DDE 資料紀錄問題
Option Explicit
Dim actEnabled As Boolean
Dim cIndex As Single

Private Sub Workbook_Open()
    ' 以下四列資料之設定,可配合實作、或測試之目的,直接在 "sheet1" 指定之設定欄,得隨時予以異動。
    If (Sheets("DATA").Range("X5").Value = "") Then Sheets("DATA").Range("X5").Value = "08:30:00"   ' 假設C6欄位為空白,則寫入開盤起始時間
    If (Sheets("DATA").Range("X6").Value = "") Then Sheets("DATA").Range("X6").Value = "13:50:00"   ' D6欄位亦同。(此兩欄紀錄起始終止時間)
    If (Sheets("DATA").Range("Y5").Value = "") Then Sheets("DATA").Range("Y5").Value = "00:05:00"   ' 紀錄資料匯入相隔時間,如每隔一分鐘寫入一次。
    If (Sheets("DATA").Range("Y6").Value = "") Then Sheets("DATA").Range("Y6").Value = 2            ' 紀錄已匯入資料列數。

    If (TimeValue(Now) > Sheets("DATA").Range("X6").Value) Then       ' 如果目前時間業已超過 D6 的營業時段,則呼叫.......
        Call stopProcedure
    Else                                                                 ' 反之在 D6 設定時間以前,則呼叫.......
        Call startProcedure
    End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Call actStop
End Sub

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

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

Sub newTitle()
    Sheets(Sheet1).[A1].Resize(, 22) = Sheets(DATA).[A1:V1].Value  ' 套上你欲匯入資料的表頭名稱
End Sub

Sub Starter()
    If (actEnabled = True And TimeValue(Now) >= Sheets("DATA").Range("X5").Value And TimeValue(Now) <= Sheets("DATA").Range("X6").Value) Then
        cIndex = Sheets("DATA").Range("Y6").Value

        If (cIndex = 0) Then Call newTitle  ' newTitle 程序 (由使用者自行定義) 是將第一列的資料抬頭名稱寫入到sheet2;如日期、時間的對應欄位資料等。

        Sheets("DATA").Range("X6").Value = cIndex + 1       ' 紀錄列號加一。

        ' 複製從券商DDE匯入之相對應位置資料,如 A1、B1、C1、D1 對應的可能是內盤、外盤、成交、漲跌等等,以此類推。
       ' Sheets(Sheet1).[A65536].End(xlUp).Offset(1).Resize(, 22) = Sheets("DATA").[A2:V22].Value
Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, 22) = Sheets("DATA").[A2:v2].Value
        cIndex = Sheets("sheet1").Range("X6").Value      ' 切記 Counter (計數器) 要加一,否則永遠為零 (當然已也可以不予紀錄資料列述,依個人習性)。
    End If
End Sub

Sub actStart()

actEnabled = True

Application.OnTime (Now + Sheets("DATA").Range("Y5").Value), "onStarter"         ' 寫入資料的排程 (目前是每隔五分鐘寫入一次)

End Sub


Sub onStarter()
    If Not IsError(Sheets("DATA").[A2]) Then Call Starter
    If actEnabled Then Call actStart
End Sub


Sub actStop()
    actEnabled = False

    On Error Resume Next
    Application.OnTime Now, "ThisWorkBook.onStarter", , False
End Sub

關於盤中DDE紀錄 20120517---1.rar (17.03 KB)

TOP

回復 9# devidlin
煩請說明那裡出問題
1:沒來源dde會出現" #REF!  "
2:sheets("data")之 x5, x6 時間須調整到您需要的區間
參考先

TOP

        靜思自在 : 為自己找藉口的人永遠不會進步。
返回列表 上一主題