大家好,我有跟barrykuo大大有相同的問題,就是想擷取DDE的"整時"資料( ex :00:01:00、00:02:00....)
,因為我對VBA沒有基礎,只是爬文抓適用程式來修改。但在整時資料擷取上仍無法獲得解決。
目前我把
Application.OnTime Now + TimeValue("00:00:0" & 59 - Second(Time) Mod 1), "自動記錄" '每1分鐘遞迴一次
修改成這樣,但在記錄資料時,無法得到"準時"記錄,還出現1分內記錄2次、或者隔了幾分都沒動靜....。
因為我的權限不能下載barrykuo大大程式來比較,所以咧出我的程式,請教各位前輩如何解決。
Public uMode&, StartTime, EndTime
Sub 共用參照()
StartTime = "08:29:30" '開盤時間(提早十秒開始,才可記錄開盤量價)
EndTime = "23:59:59" '測試時間使用
End Sub
Sub 自動記錄()
Dim MyBook As Workbook, MySht As Worksheet, xEnd As Range
'--------------------------------------------------------------------------
If uMode = 0 Then Exit Sub
If Time > TimeValue(EndTime) Then Exit Sub '收盤時間以後不執行
Set MyBook = ThisWorkbook
Set MySht = MyBook.Sheets("DDE")
'讓程式只在本檔案的〔指定工作表〕中執行,否則會將資料寫到其它工作表
MySht.Range("AA6") = Time '當前時間(時間碼表)
'----------------------------------------------------------
If Val(MySht.Range("AA11").Value) > 0 Then
Set xEnd = MySht.Range("A65536").End(xlUp)(2)
If xEnd.Row < 12 Then Set xEnd = MySht.Range("A12")
MySht.Range("A11:Z11").Value = MySht.Range("A6:Z6").Value
xEnd.Resize(1, 26).Value = MySht.Range("A2:Z2").Value
xEnd(1, 27).Value = Time
'------------------------------------------------
If ActiveSheet.Name = MySht.Name And xEnd.Row > 20 Then
ActiveWindow.ScrollRow = xEnd.Row - 8 '讓最新資料保持在可見視窗中
End If
ThisWorkbook.Save '存檔
End If
'----------------------------------------------------------
'每一分遞迴一次
Application.OnTime Now + TimeValue("00:00:0" & 59 - Second(Time) Mod 1), "自動記錄"
End Sub
Sub 開始執行()
Call 共用參照
uMode = 1
Call 自動記錄
End Sub
Sub 停止執行()
uMode = 0
End Sub作者: GBKEE 時間: 2014-7-5 14:49
If Time > TimeValue(EndTime) Then '收盤時間以後不執行
Sht2.[W4] = "已過收盤時問"
uMode = 0
Exit Sub
End If
Sht2.Range("W2") = Time '當前時間(時間碼表)
'----------------------------------------------------------
'每1分鐘記錄 Mod 1
If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then
xRow = Sht1.Range("A65536").End(xlUp).Row + 1
Sht1.Range("A" & xRow & ":V" & xRow).Value = Sht2.Range("A2:V2").Value
Sht1.Range("W" & xRow).Value = Time
'------------------------------------------------
If ActiveSheet.Name = Sht1.Name And xRow > 25 Then
ActiveWindow.ScrollRow = xRow - 15 '讓最新資料保持在可見視窗中
End If
ThisWorkbook.Save '存檔
Beep
End If
Application.OnTime TimeSerial(Hour(Time), Minute(Time) + 1, 0), "自動記錄" '每1分記錄一次
End Sub
Sub 開始執行()
If uMode = 1 Then Exit Sub
Call 共用參照
uMode = 1
Sht2.[W4] = "執行中.."
Call 自動記錄
End Sub
Sub 停止執行()
uMode = 0
Call 共用參照
Sht2.[W4] = "已停止"
End Sub