- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
本帖最後由 c_c_lai 於 2012-5-18 08:23 編輯
附上檔案,已參考大大建議的程式碼做修改,但仍無法執行
有請教C大,謝謝!
irene83 發表於 2012-5-18 00:19 
我看到你的檔案了,請檢察你原本設定欄位座標:
"Y5" ---> Range("X5").Value = "08:30:00"
"Y6" ---> Range("X6").Value = "13:50:00"
"Z5" ---> Range("Y5").Value = "00:05:00"
"Z6" ---> Range("Y6").Value = 2
關於盤中DDE紀錄 20120517.rar (13.89 KB)
你的等級可能無法下載,所以我將它貼出來,你再試試看,
如有問題再來函,但回覆時,請按下端的"回覆"鈕,
否則我是不知道你已回覆了。- ' 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
- cIndex = Sheets("sheet1").Range("X6").Value ' 切記 Counter (計數器) 要加一,否則永遠為零 (當然已也可以不予紀錄資料列述,依個人習性)。
- End If
- End Sub
- Sub actStart()
- actEnabled = True
- Application.OnTime (Now + Sheets("DATA").Range("Y5").Value), "ThisWorkBook.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
複製代碼 |
|