- 帖子
- 75
- 主題
- 1
- 精華
- 0
- 積分
- 371
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office 2007
- 閱讀權限
- 20
- 註冊時間
- 2010-5-4
- 最後登錄
- 2025-4-13
|
5#
發表於 2012-5-18 21:33
| 只看該作者
回復 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 |
|