標題:
[分享]
分享的定時抓DDE資料程式碼,但是需要人指點迷津
[打印本頁]
作者:
handsometrowa
時間:
2013-6-5 13:57
標題:
分享的定時抓DDE資料程式碼,但是需要人指點迷津
這陣子忙著統計資料,一方面又架構系統,感謝此討論區很多版大的協助,終於有一個完整的版本想分享給大家
一般不管是金融業人或是一般投資人 都會利用券商的DDE 去抓資料 並且做分析或式操作
有一個朋友給了我一個範例 如下 我想分享給大家,拍謝因為抓的DDE資料不同 請各位自行調整 但是我有一個地方相當的不懂 希望請前輩用白話文分析
整個程式碼是這樣子 這個程式碼可以自己修改抓資料的時間 願與大家分享共同討論
Option Explicit
Dim T1 As Date
Const 開始 = "08:45:05"
Const 結束 = "13:46:08"
Const 週期1 = "0:0:10"
Sub start()
Call StopTimer
Call Timer1
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime T1, "Timer1", , 0
T1 = 0
End Sub
Sub Timer1()
If T1 Then
Sheets("台指").Range("B6000").End(xlUp).Offset(1, 0) = Sheets("sheet1").Range("B2")
Sheets("電指").Range("B6000").End(xlUp).Offset(1, 0) = Sheets("sheet1").Range("B4")
Sheets("金指").Range("B6000").End(xlUp).Offset(1, 0) = Sheets("sheet1").Range("B6")
End If
T1 = TimeNext(開始, 結束, 週期, Now)
If T1 Then Application.OnTime T1, "Timer1"
End Sub
Function TimeNext(TStart As String, TEnd As String, TFrequency As String, TNOW As Date)
If TNOW < Int(TNOW) + TimeValue(TStart) Then
TimeNext = Int(TNOW) + TimeValue(TStart)
ElseIf _
TNOW >= Int(TNOW) + TimeValue(TEnd) Then
TimeNext = 0
Else
TimeNext = Int((TNOW + TimeValue(TFrequency) + 0.5 / 86400) / TimeValue(TFrequency)) * TimeValue(TFrequency)
End If
End Function
複製代碼
我想請問有沒有人能用很白的白話文解釋這個函式 的最後一個判斷式
TimeNext = Int((TNOW + TimeValue(TFrequency) + 0.5 / 86400) / TimeValue(TFrequency)) * TimeValue(TFrequency)
為什麼作者要這樣子設定呢?
不知道當初設計的朋友有沒有再版上 一起說聲感謝~
作者:
GBKEE
時間:
2013-6-5 16:58
回復
1#
handsometrowa
Option Explicit
Dim T1 As Date
Const 開始 = "08:45:05"
Const 結束 = "13:46:08"
Const 週期1 = "12:00:10 AM"
'******************************
'常數可直接設為時間
'Const 開始 = #8:45:05 AM#
'Const 結束 = #1:46:08 PM#
'Const 週期1 = #12:00:10 AM# '10分鐘
'***************************
Sub start()
Call StopTimer
Call Timer1
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime T1, "Timer1", , 0
T1 = Now
'************************
'建議改為 Time(時間)
'T1 = Time
'***********************
End Sub
Sub Timer1()
'*********************
'依序只執行最先成立的條件,如後面有成立的條件是不會執行的.
'If 條件=True Then
' 執行程式碼
'ElseIf 條件=True Then
' 執行程式碼
'Else '所有條件都不成立
' 執行程式碼
'End If
'**********************
If T1 Then ' T1> 0 -> T1 = True ,T1= 0 -> T1= False
Sheets("台指").Range("B6000").End(xlUp).Offset(1, 0) = Sheets("sheet1").Range("B2")
Sheets("電指").Range("B6000").End(xlUp).Offset(1, 0) = Sheets("sheet1").Range("B4")
Sheets("金指").Range("B6000").End(xlUp).Offset(1, 0) = Sheets("sheet1").Range("B6")
End If
'******************
'T1 =函數(參數1,參數2,參數3,參數4)傳回的數值
'******************
T1 = TimeNext(開始, 結束, 週期1, Now) '建議 Now (日期+時間) 改為 Time (時間)
If T1 Then Application.OnTime T1, "Timer1"
End Sub
Function ATimeNext(TStart As String, TEnd As String, TFrequency As String, TNOW As Date)
'Int(TNOW)->去掉小數(時間) 傳回日期
If TNOW < Int(TNOW) + TimeValue(TStart) Then 'TNOW > 日期+時間
TimeNext = Int(TNOW) + TimeValue(TStart)
' imeNext > 日期+時間
ElseIf TNOW >= Int(TNOW) + TimeValue(TEnd) Then
TimeNext = 0
Else
TimeNext = Int((TNOW + TimeValue(TFrequency) + 0.5 / 86400) / TimeValue(TFrequency)) * TimeValue(TFrequency)
'86400秒 = 24(小時) * 60(分鐘) * 60(秒)
End If
End Function
'***********************************************
'常數直接設為時間 'TNOW 改為 Time(時間)
'T1 = TimeNext(開始, 結束, 週期1, Time)
'函數參數的型態須修改
Function TimeNext(TStart As Date, TEnd As Date, TFrequency As Date, TNOW As Date) '改為 Time(時間)
If TNOW < TStart Then
TimeNext = TStart
ElseIf TNOW >= TEnd Then
TimeNext = 0
Else
TimeNext = Time + TFrequency
End If
End Function
'***********************************************
複製代碼
作者:
handsometrowa
時間:
2013-6-6 09:56
感謝版主的回應阿 ~修改之後我看得比較懂了@@" 但是我還是有點好奇
為什麼作者他要這樣子設定
Int((TNOW + TimeValue(TFrequency) + 0.5 / 86400) / TimeValue(TFrequency)) * TimeValue(TFrequency)
這個公式裡面
(TNOW + TimeValue(TFrequency) + 0.5 / 86400) / TimeValue(TFrequency)
然後又乘TimeValue(TFrequency)
這是什麼意思阿???
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)