- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
22#
發表於 2012-9-9 22:28
| 只看該作者
回復 c_c_lai
我是使用EASYWIN的dde訊號,如果要每30秒記錄一趟上面所有的資料該如何寫VBA?因為套表上去 ...
ribbits 發表於 2012-9-9 14:31 
貼上程式碼,供你參考:- Option Explicit
- Dim timerEnabled As Boolean ' 判定開啟本工作表單的時段是否為開盤前啟動。
- Private Sub Workbook_Open()
- Dim Pos As Long ' 將每隔 "多少時間" 處理時段,移到此處來處理。
- timerEnabled = False
- Pos = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row ' 求出該欄之最後使用列數
- If (Pos <= 1) Then Pos = 1
- Sheets("策略記錄").[A4] = "已匯入 " & (Pos - 1) & " 筆資料"
- Call timerStart ' 程式一啟始,便去自動執行 timerStart
- End Sub
- Private Sub Workbook_BeforeClose(Cancel As Boolean)
- On Error Resume Next
- Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.ATimer", , False
-
- Me.Save
- End Sub
- Public Sub ATimer()
- Dim Pos As Long ' 將每隔 "多少時間" 處理時段,移到此處來處理。
-
- On Error Resume Next
- ' If (TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
-
- If (TimeValue(Now) >= TimeValue("08:45:00")) Then ' 開盤、收盤時段設定
- ' 盤中處理,將資料匯入寫入工作表單內儲存。
- With Sheets("Data")
- Pos = .Range("B" & Rows.Count).End(xlUp).Row ' 求出該欄之最後使用列數
- If (Pos <= 1) Then Pos = 1
- Pos = Pos + 1 ' 將變動行號加一行
- Sheets("策略記錄").[A4] = "已匯入 " & (Pos - 1) & " 筆資料"
- If Not IsError(Sheets("策略記錄").[E2]) Then
- .Cells(Pos, 1) = Date ' 日期
- .Cells(Pos, 2) = Time ' 時間
- .Cells(Pos, 3) = Sheets("策略記錄").[E2] ' 成交價
- .Cells(Pos, 4).Offset(0).Resize(, 3) = Sheets("策略記錄").[G2:I2].Value
- .Cells(Pos, 7) = Sheets("策略記錄").[K2] ' 成交量
- .Cells(Pos, 8).Offset(0).Resize(, 8) = Sheets("策略記錄").[O2:V2].Value
- End If
- End With
- End If
- If timerEnabled Then Call timerStart
- End Sub
- Sub timerStart()
- If timerEnabled Then
- ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。
- Application.OnTime (Now + TimeValue("00:00:30")), "ThisWorkbook.ATimer"
- Else
- timerEnabled = True
-
- ' 將第一次啟動時間更改為設定 "開盤時間"前,如果開啟 Excel 時,已經過了設定 "開盤時間",則一進入系統即直接去執行紀錄作業。
- If (TimeValue(Now) <= TimeValue("08:45:00")) Then
- Application.OnTime (TimeValue("08:45:00")), "ThisWorkbook.ATimer"
- Else
- ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
- ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
- Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.ATimer"
- End If
- End If
- End Sub
複製代碼 因為你目前無權下載,所以將執行畫面貼示,你只要照著修正即可:
EASYWIN0909.rar (12.11 KB)
|
|