返回列表 上一主題 發帖

[發問] 劵商DDE傳Excel 每分自動記錄數據

回復 2# andylin
論壇裡,固定時間自動計錄數據的討論很多,你昨日才註冊為會員,不必急著發文找答案,
VBA的每一程序內的程式碼都是根據個案的需求所寫,無法直接套用的,
你須多看看論壇裡的文章,不懂,不會,再發文不遲的.

TOP

回復 5# andylin
我想把"MSCI權重50"sheet裡頭的數據  自動每分鐘都有數據list到 "sheet2"裡頭
sheet2空空如也 不知你要的數據如何排列,請給個範例才知如何起頭.

TOP

本帖最後由 GBKEE 於 2011-7-7 08:48 編輯

回復 8# andylin
你上傳的是2007版 圖形 2003無法處裡
你無法下載檔案.下列程式碼你先存檔後再開啟試試看.
PS:每日08:45前開啟檔案數據才會落於正確時間位置
  1. 'ThisWorkbook模組的程序
  2. Private Sub Workbook_Open()    '此程式是檔案開啟時自動執行的程式
  3.     Dim E As Range
  4.     If MsgBox("啟動自動記錄資料??", vbYesNo) = vbNo Then Exit Sub   
  5.     Sheets("1分K").UsedRange.Offset(1, 1) = ""       '  清除昨日資料
  6.     Sheets("5分K").UsedRange.Offset(1, 1) = ""
  7.     Sheets("15分K").UsedRange.Offset(1, 1) = ""
  8.     For Each E In Sheets("1分K").[A2:A302]
  9.         Application.OnTime E, "ThisWorkbook.資料輸入"  '依[A2:A302]內的時間執行程式 ->資料輸入
  10.     Next
  11. End Sub
  12. Sub 資料輸入()
  13.      Dim Ar()
  14.      Ar = Array([MSCI權重50股!D2], [MSCI權重50股!E2], [MSCI權重50股!B2], "", _
  15.                 [Matrix!F2], [Matrix!F3], [Matrix!F4], [Matrix!F144], "", _
  16.                 [SUM(Matrix!AF16:AF47)], [SUM(Matrix!AF48:AF79)], [SUM(Matrix!AF80:AF111)], [SUM(Matrix!AF112:AF143)])
  17.     'Ar陣列 ->  存入你要的數據
  18.      If Minute(Time) Mod 1 = 0 Then Sheets("1分K").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(1, 8).Value = Ar  'Minute(Time) Mod 1=0  每分鐘
  19.      If Minute(Time) Mod 5 = 0 Then Sheets("5分K").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(1, 8).Value = Ar  'Minute(Time) Mod 1=0  每5分鐘
  20.      If Minute(Time) Mod 15 = 0 Then Sheets("15分K").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(1, 8).Value = Ar 'Minute(Time) Mod 1 =0 每15分鐘
  21.      'Range("B" & Rows.Count) -> Rows.Count列的總列數 2003版: Range("B65536")
  22.      'Range("B" & Rows.Count).End(xlUp) ->Range("B65536")往上移動到有資料的位置
  23.      '往上移動到有資料的位置.Offset(1)->Offset(1,0)->往下位移(1列,0欄)
  24.      '往上移動到有資料的位置.Offset(1).Resize(1, 8)->Resize擴充範圍(1列,8欄)
  25. End Sub
複製代碼

TOP

回復 10# andylin
對的 ,但如有錯誤 壓縮Excel檔上傳,才能找出.

TOP

回復 13# andylin
為何附檔中沒有我給你的VBA程序 ,沒VBA的程序我無法度!!

TOP

回復 15# andylin
由於MSCI股/大盤指數/現貨指數  都是9:00am才開始有數據   對阿  那08:45-09:00 那有數值上的變動
我測試沒問題 你可調整電腦時間 到09:00 前再測試檔案看看

TOP

本帖最後由 GBKEE 於 2011-7-10 07:50 編輯

回復 17# andylin
將該Excel檔裡的時間 8:45am~8:59am欄位刪除掉 讓第一時間為 9:00am 就是這樣啦
因為我測試沒問題 所以在請你 在不是股市開市時間裡:可調整電腦的時間在9:00 Am 之前打開檔案 測試程式是否有依時間紀錄數據.

TOP

回復 20# andylin
謝謝你的圖檔 隔行如隔山,我完全看不懂.哈....

若明日8:45am開盤前 我開起此excel檔後 我是否需要自己手動將excel欄位裡今日的數據全delete掉?
答案在這裡
Private Sub Workbook_Open()    '此程式是檔案開啟時自動執行的程式
    Dim E As Range
    If MsgBox("啟動自動記錄資料??", vbYesNo) = vbNo Then Exit Sub      '按 Yes 會依序清除昨日資料 按 No 離開程式   
    Sheets("1分K").UsedRange.Offset(1, 1) = ""       ' 清除昨日資料delete掉
    Sheets("5分K").UsedRange.Offset(1, 1) = ""       '  清除昨日資料 delete掉   
    Sheets("15分K").UsedRange.Offset(1, 1) = ""     '  清除昨日資料delete掉





TOP

本帖最後由 GBKEE 於 2011-7-16 13:43 編輯

回復 23# andylin
依樣畫葫蘆 試試看
  1. 'ThisWorkbook模組的程序
  2. Private Sub Workbook_Open()    '此程式是檔案開啟時自動執行的程式
  3.     Dim E As Range
  4.     If MsgBox("啟動自動記錄資料??", vbYesNo) = vbNo Then Exit Sub
  5.     Sheets("1分K").UsedRange.Offset(1, 1) = ""       '  清除昨日資料
  6.     Sheets("5分K").UsedRange.Offset(1, 1) = ""
  7.     Sheets("15分K").UsedRange.Offset(1, 1) = ""
  8.     Application.OnTime #9:00:00 AM#, "ThisWorkbook.資料輸入"
  9.     '**** 09:00:00時間執行程式 ->資料輸入
  10. End Sub
  11. Sub 資料輸入()
  12.     Dim Ar(1 To 15)      'Ar陣列 ->  存入你要的數據
  13.     Ar(1) = Time
  14.     Ar(2) = [Table!B2]
  15.     Ar(3) = [Table!C2]
  16.     Ar(4) = "=IF(ROW()>2,RC[-2]-R[-1]C[-2],"""")"    ' **  公式
  17.     Ar(5) = "=IF(ROW()>2,RC[-2]-R[-1]C[-2],"""")"
  18.     'Ar(6) 空白
  19.     Ar(7) = [Table!E2]
  20.     Ar(8) = [Table!F2]
  21.     Ar(9) = "=IF(ROW()>2,RC[-2]-R[-1]C[-2],"""")"
  22.     Ar(10) = "=IF(ROW()>2,RC[-2]-R[-1]C[-2],"""")"
  23.     'Ar(11) 空白
  24.     Ar(12) = [Table!H2]
  25.     Ar(13) = [Table!I2]
  26.     Ar(14) = "=IF(ROW()>2,RC[-2]-R[-1]C[-2],"""")"
  27.     Ar(15) = "=IF(ROW()>2,RC[-2]-R[-1]C[-2],"""")"
  28.     If Minute(Time) Mod 1 = 0 Then Sheets("1分K").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(Ar)).Value = Ar  'Minute(Time) Mod 1=0  每分鐘
  29.     If Minute(Time) Mod 5 = 0 Then Sheets("5分K").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(Ar)).Value = Ar  'Minute(Time) Mod 1=0  每5分鐘
  30.     If Minute(Time) Mod 15 = 0 Then Sheets("15分K").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 1 =0 每15分鐘
  31.     If Time <= #1:30:00 PM# Then Application.OnTime TimeValue(Format(Time, "hh:MM:00")) + #12:01:00 AM#, "ThisWorkbook.資料輸入"
  32.     ' ***  #1:30:00 PM# 之前時間執行程式 ->資料輸入
  33. End Sub
複製代碼
請看這裡的PS

TOP

回復 27# andylin
  1. 'ThisWorkbook模組的程序
  2. Private Sub Workbook_Open()    '此程式是檔案開啟時自動執行的程式
  3.     Dim E As Range
  4.     If MsgBox("啟動自動記錄資料??", vbYesNo) = vbNo Then Exit Sub
  5.     Sheets("1分K").UsedRange.Offset(1, 1) = ""       '  清除昨日資料
  6.     Sheets("5分K").UsedRange.Offset(1, 1) = ""
  7.     Sheets("15分K").UsedRange.Offset(1, 1) = ""
  8.     Application.OnTime #8:46:00 AM#, "ThisWorkbook.資料輸入"
  9.     '**** 08:46:00時間執行程式 ->資料輸入
  10. End Sub
  11. Sub 資料輸入()
  12.     '''''''''''''''''''''''''''''''''''''
  13.     'Dim Ar()      'Ar陣列 ->  存入你要的數據
  14.     'Ar = Sheets("Table").Range("B2:D2").Value
  15.     '''''''''''''''''''''''''''''''''''''
  16.     Dim Ar(1 To 3)      'Ar陣列 ->  存入你要的數據
  17.     Ar(1) = [Table!B2]
  18.     Ar(2) = [Table!C2]
  19.     Ar(3) = [Table!D2]
  20. '**   Sheets("1分K").Range("B" & Rows.Count).End(xlUp).Offset(1) **   資料從B欄開使置入 **

  21. If Minute(Time) Mod 1 = 0 Then Sheets("1分K").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(Ar)).Value = Ar  'Minute(Time) Mod 1=0  每分鐘
  22.     If Minute(Time) Mod 5 = 0 Then Sheets("5分K").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(Ar)).Value = Ar  'Minute(Time) Mod 1=0  每5分鐘
  23.     If Minute(Time) Mod 15 = 0 Then Sheets("15分K").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 1 =0 每15分鐘
  24.     If Time <= #1:30:00 PM# Then Application.OnTime TimeValue(Format(Time, "hh:MM:00")) + #12:01:00 AM#, "ThisWorkbook.資料輸入"
  25.     ' ***  #1:30:00 PM# 之前時間執行程式 ->資料輸入
  26. End Sub
複製代碼

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題