請問高手要將以下DDE 每分鐘記錄改為30秒自動記錄一次要怎改
- 帖子
- 48
- 主題
- 14
- 精華
- 0
- 積分
- 62
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-25
- 最後登錄
- 2022-4-23
|
請問高手要將以下DDE 每分鐘記錄改為30秒自動記錄一次要怎改
我對VBA都不懂在網上找好久找到一個比較接近我要的範例
可是他是每分鐘記錄一次
可以請高手幫我改每30秒就記錄一次嗎
也謝謝這位提供範例的網友
Option Explicit
Dim LastMin As Integer
Private Sub Workbook_Open()
Sheets("策略記錄").Cells(4, 2) = 10
LastMin = Minute(Time)
Call Timer
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
End Sub
Public Sub Timer()
Dim Pos As Integer, i As Integer, RangeStr As String
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer" '每秒顯示
Sheets("策略記錄").Cells(3, 2) = Time '將時間show至策略的b3欄位
Dim HHMM As Integer
HHMM = Hour(Time) * 100 + Minute(Time)
If (HHMM < 845 Or HHMM > 1345) Then Exit Sub '營業時間才執行
If Minute(Time) <> LastMin Then '開始後做
With Sheets("策略記錄")
.Cells(4, 2) = .Cells(4, 2) + 1 '將變動行號加一行
Pos = .Cells(4, 2)
.Cells(Pos, 1) = Time
.Cells(Pos, 2) = .Cells(2, 2)
.Cells(Pos, 3) = .Cells(2, 3)
.Cells(Pos, 4) = .Cells(2, 4)
.Cells(Pos, 5) = .Cells(2, 5)
.Cells(Pos, 6) = .Cells(2, 6)
.Cells(Pos, 7) = .Cells(2, 7)
.Cells(Pos, 8) = .Cells(2, 8)
.Cells(Pos, 9) = .Cells(2, 9)
.Cells(Pos, 10) = .Cells(2, 10)
End With
LastMin = Minute(Time)
End If
End Sub |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
2#
發表於 2012-5-25 14:32
| 只看該作者
回復 1# xu123
就以你手上案例來討論的話,你只要將 "00:00:01" (每一秒)
修改為 "00:00:30" (每三十秒) 便完成了! |
|
|
|
|
|
|
- 帖子
- 48
- 主題
- 14
- 精華
- 0
- 積分
- 62
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-25
- 最後登錄
- 2022-4-23
|
3#
發表於 2012-5-25 14:55
| 只看該作者
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
4#
發表於 2012-5-25 21:14
| 只看該作者
回復 3# xu123
不須等開盤,你只要開啟該Excel 表單,於 8:45 後觀察每隔30秒是否會寫入一筆紀錄,
答案便即知曉。 |
|
|
|
|
|
|
- 帖子
- 51
- 主題
- 6
- 精華
- 0
- 積分
- 59
- 點名
- 0
- 作業系統
- VISTA
- 軟體版本
- office 2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-4-1
- 最後登錄
- 2018-5-17
|
5#
發表於 2012-5-25 22:16
| 只看該作者
回復 xu123
不須等開盤,你只要開啟該Excel 表單,於 8:45 後觀察每隔30秒是否會寫入一筆紀錄,
答案便 ...
c_c_lai 發表於 2012-5-25 21:14 
請問要改哪兒?
Application.OnTime Now + TimeValue("00:00:30"), "ThisWorkbook.Timer" '每秒顯示
我改這邊後 時間就不動也不記錄了?
謝謝 感恩 |
|
|
|
|
|
|
- 帖子
- 48
- 主題
- 14
- 精華
- 0
- 積分
- 62
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-25
- 最後登錄
- 2022-4-23
|
6#
發表於 2012-5-26 02:49
| 只看該作者
c_c_lai 大
試過了不行ㄋ
``我改開盤時間去測試
還是一分鐘記一次 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
7#
發表於 2012-5-26 06:49
| 只看該作者
回復 6# xu123
請附上檔案由我這方來觀察,因為那本來就可行的,
否則你的 "00:00:01" 亦無法執行。 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
8#
發表於 2012-5-26 09:44
| 只看該作者
回復 6# xu123
附上圖片以及程式碼供你實務參考:
一、 DDE 每分鐘記錄改為30秒自動記錄一次要怎改 [修改]
- Option Explicit
- Dim counter As Single ' 為加深印象,用它來顯示程式有否在運行處理
- Private Sub Workbook_Open()
- counter = 0
- Call timerStart ' 當開啟本 Excel 檔案,程式則自動執行 timerStart 程式段。
- End Sub
- Sub timerStart()
- ' 本範例設定時間是從每日八點四十五分開始起算,每隔 30 秒便會自動去執行 ThisWorkbook 程式區域內的 ExeSelf。
- ' 如果覺得等太久了,也可以去異動時段。例如: "00:00:01"(每隔 1 秒)、"00:00:10"(每隔 10 秒)、"00:00:20"(每隔 20 秒) 等等。
- If (TimeValue(Now) > TimeValue("08:45:00")) Then Application.OnTime (Now + TimeValue("00:00:30")), "ThisWorkbook.ExeSelf"
- End Sub
- Sub ExeSelf()
- counter = counter + 1 ' counter 會逐次加一
- [F8].Value = counter ' 08:45 後每隔 30 秒,請觀察 F1 欄位數字是否會異動?
- Call timerStart ' 程式之所以會反覆執行,就在於本行自動再去回頭呼叫執行 timerStart 程式段一次之故。
- End Sub
複製代碼 二、 多空力道 (O/H/L/C) 實際之程式運作程式碼,請細心端倪。- Option Explicit
- Dim timerEnabled As Boolean '
- Dim counter As Single ' 示範用計數器
- Dim Ov As Single, Hv As Single, Lv As Single, Cv As Single As Single ' 開盤價、最高價、最高價、收盤價(成交價) 等設定之變數。
- Dim turnKey As Integer ' 判斷每一輪迴上列變數初始值之設定。
- Dim nums As Integer ' 將每隔 "多少時間" 處理時段,移到此處來處理。
- Private Sub Workbook_Open()
- counter = 0
- nums = 30 ' 設定每隔 30 秒處理時段,亦可更改成 10 (每隔 10 秒)、20 (每隔 20 秒)等等。
- ' 此處不建議使用 1 秒時段來處理,因為還要去求出開盤、最高、最低、成交價。
- timerEnabled = False
- Call timerStart ' 程式一啟始,便去自動執行 timerStart
- End Sub
- Sub timerStart()
- turnKey = 0 ' 每一輪迴盤中初始值之設定。
- If timerEnabled Then
- Application.OnTime (Now), "ThisWorkbook.ExeSelf"
- Else
- ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
- Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.ExeSelf"
- End If
- End Sub
- Sub ExeSelf()
- timerEnabled = True
- If IsError(Sheets("工作表1").Range("E5").Value) Then ' 假設 E5 欄位為多空力道
- Cv = 0
- Else
- Cv = Sheets("工作表1").Range("E5").Value ' 多空力道成交價
- End If
-
- If (turnKey = 0 Or Ov = 0) Then ' 當 turnKey 值為0,表示其為初始值設定。為考量系統剛連上 DDE,
- ' 有時在第一根數值產生時 Ov = Cv 值可能為 0 (IsError()的狀態)。
- Ov = Cv ' 多空力道開盤價初始值設定
- Hv = Cv ' 多空力道最高價初始值設定
- Lv = Cv ' 多空力道最低價初始值設定
- End If
-
- turnKey = turnKey + 1
-
- If (Cv > Hv) Then Hv = Cv ' 判斷多空力道最高價
- If (Cv < Lv) Then Lv = Cv ' 判斷多空力道最低價
- counter = counter + 1
- [F1].Value = counter ' 08:45 後每隔 30 秒,請觀察 F1 欄位數字是否會異動?
-
- If (turnKey < nums) Then
- Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.ExeSelf"
- Else
- If (Cv > 0) Then Call Timer
- Call timerStart
- End If
- End Sub
- Sub Timer()
- Dim str As String
-
- If (TimeValue(Now) >= TimeValue("08:45:00") And TimeValue(Now) <= TimeValue("13:46:01")) Then ' 開盤、收盤時段設定
- ' 盤中處理,將資料匯入寫入工作表單內儲存。
- End If
- End Sub
複製代碼 請留意此兩支程式的寫法上之差異,我都盡量一一加以說明為何如此,相信對你會有助益。
我們在人生旅程上都是從不知而獲知中成長的,只要有心都可以成功的。 |
|
|
|
|
|
|
- 帖子
- 48
- 主題
- 14
- 精華
- 0
- 積分
- 62
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-25
- 最後登錄
- 2022-4-23
|
9#
發表於 2012-5-26 10:20
| 只看該作者
|
|
|
|
|
|
- 帖子
- 51
- 主題
- 6
- 精華
- 0
- 積分
- 59
- 點名
- 0
- 作業系統
- VISTA
- 軟體版本
- office 2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-4-1
- 最後登錄
- 2018-5-17
|
10#
發表於 2012-5-26 10:44
| 只看該作者
回復 xu123
附上圖片以及程式碼供你實務參考:
一、 DDE 每分鐘記錄改為30秒自動記錄一次要怎改 [修改] ...
c_c_lai 發表於 2012-5-26 09:44 
感謝c_c_lai 大這麼詳細用心的解說
又進一步學習了
來測試研究一下
感恩再感恩 |
|
|
|
|
|
|