- 帖子
- 6
- 主題
- 1
- 精華
- 0
- 積分
- 12
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office 2007
- 閱讀權限
- 10
- 性別
- 男
- 來自
- 台南
- 註冊時間
- 2013-1-21
- 最後登錄
- 2013-2-5
|
關於盤中開啟DDE每五分鐘抓一次
' DDE 資料紀錄問題
Option Explicit
Dim actEnabled As Boolean
Dim cIndex As Single
Private Sub Workbook_Open()
' 以下四列資料之設定,可配合實作、或測試之目的,直接在 "sheet1" 指定之設定欄,得隨時予以異動。
If (Sheets("sheet1").Range("BA1").Value = "") Then Sheets("sheet1").Range("BA1").Value = "08:45:00" ' 假設C6欄位為空白,則寫入開盤起始時間
If (Sheets("sheet1").Range("BA2").Value = "") Then Sheets("sheet1").Range("BA2").Value = "13:45:59" ' D6欄位亦同。(此兩欄紀錄起始終止時間)
If (Sheets("sheet1").Range("BB1").Value = "") Then Sheets("sheet1").Range("BB1").Value = "00:01:00" ' 紀錄資料匯入相隔時間,如每隔一分鐘寫入一次。
If (Sheets("sheet1").Range("BB2").Value = "") Then Sheets("sheet1").Range("BB2").Value = 0 ' 紀錄已匯入資料列數。
If (TimeValue(Now) > Sheets("sheet1").Range("BA2").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(2).[A1].Resize(, 4) = Sheets(1).[A1:D1].Value ' 套上你欲匯入資料的表頭名稱
End Sub
Sub Starter()
If (actEnabled = True And TimeValue(Now) >= Sheets("sheet1").Range("BA1").Value And TimeValue(Now) <= Sheets("sheet1").Range("BA2").Value) Then
cIndex = Sheets("sheet1").Range("BB2").Value
If (cIndex = 0) Then Call newTitle ' newTitle 程序 (由使用者自行定義) 是將第一列的資料抬頭名稱寫入到sheet2;如日期、時間的對應欄位資料等。
Sheets("sheet1").Range("BB2").Value = cIndex + 1 ' 紀錄列號加一。
' 複製從券商DDE匯入之相對應位置資料,如 A1、B1、C1、D1 對應的可能是內盤、外盤、成交、漲跌等等,以此類推。
Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 4) = Sheets(1).[A2:D2].Value
cIndex = Sheets("sheet1").Range("BB2").Value ' 切記 Counter (計數器) 要加一,否則永遠為零 (當然已也可以不予紀錄資料列述,依個人習性)。
End If
End Sub
Sub onStarter()
If Not IsError(Sheets(1).[A2]) Then Call Starter
If actEnabled Then Call actStart
End Sub
Sub actStart()
actEnabled = True
Application.OnTime (Now + Sheets("sheet1").Range("BB1").Value), "ThisWorkBook.onStarter" ' 寫入資料的排程 (目前是每隔五分鐘寫入一次)
End Sub
Sub actStop()
actEnabled = False
On Error Resume Next
Application.OnTime Now, "ThisWorkBook.onStarter", , False
End Sub
用這套下去修改 但是盤中開啟時抓取時間都不是 五分鐘K的時間 例如: 11:59:31
請問該如何修改 讓他在 五分鐘整分抓取 |
|