請問高手要將以下DDE 每分鐘記錄改為30秒自動記錄一次要怎改
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 1# xu123
就以你手上案例來討論的話,你只要將 "00:00:01" (每一秒)
修改為 "00:00:30" (每三十秒) 便完成了! |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 3# xu123
不須等開盤,你只要開啟該Excel 表單,於 8:45 後觀察每隔30秒是否會寫入一筆紀錄,
答案便即知曉。 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 6# xu123
請附上檔案由我這方來觀察,因為那本來就可行的,
否則你的 "00:00:01" 亦無法執行。 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 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
複製代碼 請留意此兩支程式的寫法上之差異,我都盡量一一加以說明為何如此,相信對你會有助益。
我們在人生旅程上都是從不知而獲知中成長的,只要有心都可以成功的。 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 9# xu123
- Option Explicit
- Dim LastMin As String ' 更改為間隔時段設定
- Private Sub Workbook_Open()
- Sheets("策略記錄").Cells(4, 2) = 10 ' 保留你之前的設定,每次一開啟Excel都重新開始
- LastMin = "00:00:30" ' 每隔 30 秒的時段設定。如需以一分鐘做處哩,則請修正為 "00:01:00"
-
- 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, i, HHMM As Integer, RangeStr As String
-
- On Error Resume Next
- Sheets("策略記錄").Cells(3, 2) = Time '將時間show至策略的b3欄位
-
- HHMM = Hour(Time) * 100 + Minute(Time)
- If (HHMM < 845 Or HHMM > 1345) Then Exit Sub '營業時間才執行
-
- 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
-
- Application.OnTime Now + TimeValue(LastMin), "ThisWorkbook.Timer" ' 每 LastMin 執行一次
- End Sub
複製代碼 祝星期假日愉快!
自動記錄每分鐘委買賣均值-範例.rar (12.31 KB)
|
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
本帖最後由 c_c_lai 於 2012-6-25 08:42 編輯
回復 17# mead
附上一個可以隨你需求異動的 "自動記錄每分鐘委買賣均值",
以後你就沒有煩惱的事了!
自動記錄每分鐘委買賣均值.rar (13.96 KB)
P.S. 請將 Time() 裡的 .Cells(21, 2).Offset(0).Resize(, 9) = .[B12:J12].Value
更改成 .Cells(Pos, 2).Offset(0).Resize(, 9) = .[B2:J2].Value |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
本帖最後由 c_c_lai 於 2012-6-25 17:34 編輯
回復 19# mead
找到了,已 E-Mail 過去了! |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 21# usana642
1. 請將下列程式碼複製到 ThisWorkbook 模組內,並予儲存。- Option Explicit
- Dim timerEnabled As Boolean ' 判定開啟本工作表單的時段是否為開盤前啟動。
- Dim Pos As Integer ' 將每隔 "多少時間" 處理時段,移到此處來處理。
- Private Sub Workbook_Open()
- Pos = Sheets("策略記錄").Range("B" & Rows.Count).End(xlUp).Row
- If (Pos < 11) Then Pos = 10
- Sheets("策略記錄").Cells(4, 2) = Pos
- If (Sheets("策略記錄").Range("B6").Value = "") Then Sheets("策略記錄").Range("B6").Value = "08:45:00"
- If (Sheets("策略記錄").Range("B7").Value = "") Then Sheets("策略記錄").Range("B7").Value = "13:45:00"
- If (Sheets("策略記錄").Range("B8").Value = "") Then Sheets("策略記錄").Range("B8").Value = "00:00:30"
-
- timerEnabled = False
- Call timerStart ' 程式一啟始,便去自動執行 timerStart
- End Sub
- Private Sub Workbook_BeforeClose(Cancel As Boolean)
- On Error Resume Next
- Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
-
- Me.Save
- End Sub
- Public Sub Timer()
- On Error Resume Next
- If (TimeValue(Now) > Sheets("策略記錄").Range("B7").Value) Then Exit Sub
-
- If (TimeValue(Now) >= Sheets("策略記錄").Range("B6").Value) Then ' 開盤、收盤時段設定
- ' 盤中處理,將資料匯入寫入工作表單內儲存。
- With Sheets("策略記錄")
- .Cells(3, 2) = Time ' 將時間 Show 至策略的 B3 欄位
- Pos = Pos + 1 ' 將變動行號加一行
- .Cells(4, 2) = Pos
-
- .Cells(Pos, 1) = Time
- .Cells(Pos, 2).Offset(0).Resize(, 9) = .[B2:J2].Value
- End With
- End If
-
- Call timerStart
- End Sub
- Sub timerStart()
- If timerEnabled Then
- ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。
- Application.OnTime (Now + Sheets("策略記錄").Range("B8").Value), "ThisWorkbook.Timer"
- Else
- timerEnabled = True
-
- ' 將第一次啟動時間更改為設定 "開盤時間"前,如果開啟 Excel 時,已經過了設定 "開盤時間",則一進入系統即直接去執行紀錄作業。
- If (TimeValue(Now) <= Sheets("策略記錄").Range("B6").Value) Then
- Application.OnTime (Sheets("策略記錄").Range("B6").Value), "ThisWorkbook.Timer"
- Else
- ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
- ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
- Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.Timer"
- End If
- End If
- End Sub
複製代碼 2. 工作表單內容如圖,請參考它與程式碼間的關係及運作。
3. 以上完成後,先將本專案儲存並離開。
4. 接下來先打開券商軟體
(譬如:你製作的工作表單是跟哪一家券商連線的,如 EasyWin、eLeader、或其他券商連線軟體),
然後啟動你製作的 "自動記錄每分鐘委買賣均值" Excel,並同時連上券商連線軟體,就大功告成了!
希望它能助益於你,並能幫助你更上一層樓。 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 25# steveyeh168
沒 E-Mail Address 如何寄給你? |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
謝謝C_C_lai......
再次感謝~*_*
steveyeh168 發表於 2012-9-23 02:35 
自動記錄每分鐘委買賣均值.rar (13.96 KB)
|
|
|
|
|
|
|