Board logo

標題: [發問] 劵商DDE傳Excel 每分自動記錄數據 [打印本頁]

作者: andylin    時間: 2011-7-4 21:20     標題: 劵商DDE傳Excel 每分自動記錄數據

本帖最後由 andylin 於 2011-7-28 16:08 編輯

各位前輩先進 大家好 Orz
在舊版網頁上有 但我無權限看附檔 新版論談不知要去那搜查尋找
非常感謝您
感恩 Orz
作者: andylin    時間: 2011-7-4 23:08

本帖最後由 andylin 於 2011-7-24 18:04 編輯

若有先進前輩們們知到
還請各位大大指導 Orz
非常非常感恩 Orz
作者: GBKEE    時間: 2011-7-5 09:37

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

GBKEE大大您好 Orz
感謝您迅速回覆 小弟還來不及反應
感謝您寶貴意見 我會先從基本的文章看起
我晚點回去壓縮檔案再上傳論壇請您診斷
真的非常非常謝謝您
感恩 Orz
作者: andylin    時間: 2011-7-5 15:22

本帖最後由 andylin 於 2011-7-24 17:47 編輯

回復 4# andylin帶出
作者: GBKEE    時間: 2011-7-6 07:26

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

回復 6# GBKEE


大大您好
不好意思
我人目前正在醫院
晚上回去時我再將sheet2 list附檔給您

真的非常感謝
感恩 Orz
作者: andylin    時間: 2011-7-7 01:00

本帖最後由 andylin 於 2011-7-24 17:48 編輯

回復 6# GBKEE

大大您好
不好意思 這麼晚才回您 還請見諒 Orz

附件是我再修改的excel檔
附上附件還有勞您撥伔提點
若有造成您困擾 擔誤您寶貴時間之處 還請您見諒 Orz

非常非常感謝您
感恩 Orz
作者: GBKEE    時間: 2011-7-7 08:29

本帖最後由 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
複製代碼

作者: andylin    時間: 2011-7-7 23:33

回復 9# GBKEE


GBKEE大大您好

不好意思 我只有office2007(當年買電腦店家送的) 沒有灌2003
造成您不便之處還請見諒 Orz

我已依照您回文指示 將您所寫的程式碼save在該excel的VBA裡
如附圖所示 不知我這樣做對不對?
作者: GBKEE    時間: 2011-7-8 07:25

回復 10# andylin
對的 ,但如有錯誤 壓縮Excel檔上傳,才能找出.
作者: ten999    時間: 2011-7-8 08:25

我也遇到相似問題
以上程式碼可間接解決問題
謝謝
作者: andylin    時間: 2011-7-9 02:25

本帖最後由 andylin 於 2011-7-24 17:49 編輯

回復 11# GBKEE

GBKEE大大您好
不好意思又來麻煩您
附檔是剛update過

附件excel file 不知那裡有問題
還有勞大大提點小弟那裡需修改 Orz
要改進之處還請大大告知

真的非常謝謝您
感恩Orz
作者: GBKEE    時間: 2011-7-9 07:40

回復 13# andylin
為何附檔中沒有我給你的VBA程序 ,沒VBA的程序我無法度!!
作者: andylin    時間: 2011-7-9 16:43

本帖最後由 andylin 於 2011-7-24 17:50 編輯

回復 14# GBKEE

暈倒 Orz
我好像沒弄對

大大不好意思
excel程式碼複製貼上完後
是不是要另存成"啟用巨集活頁簿"
拍謝 Orz

拍謝 Orz
我已另存成"啟用巨集活頁簿"  如附檔
剛才讓檔案自己稍為update data
時間欄位真的有數據list了(大大真的是太神了 Orz)

非常感謝您
感恩 Orz
作者: GBKEE    時間: 2011-7-9 19:48

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

回復 16# GBKEE


請問大大
您意思是調整電腦最右下角所顯示的時間嗎?  我將電腦右下角時間調慢15分鐘嗎?

若我將該Excel檔裡的時間 8:45am~8:59am欄位刪除掉
讓第一時間為 9:00am
請問這樣可以嗎?
作者: GBKEE    時間: 2011-7-10 07:47

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

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

回復 18# GBKEE

朵解朵解  
哇栽ㄚ
我已將Excel  sheet裡時間欄的 8:45~8:59am 行 將之remove
讓時間是from 9:00am to 13:30pm

靜待明日週一9:00am開盤
希望會有變化

屆時看trend chart是否有趨勢or轉折訊號可看出 :D
希望有!!

感謝大大
感恩 感恩 Orz
作者: andylin    時間: 2011-7-11 17:28

本帖最後由 andylin 於 2011-7-24 18:07 編輯

回復 18# GBKEE

GBKEE大大您好
由於我近日在醫院照護家人 沒能全程觀看trend chart表演
小弟今日中午過後開啟該Excel檔一小時多
跑出來 就我要的!! (感動得快落淚 Orz)

小弟沒能回報您什麼  
美元指與道瓊是逆相關
您VBA功力強大 寫程式交易當沖一定易如反掌
或許有朝一日您用VBA能寫出美元指/DJ 間的關係式

附上我所記錄的美元指VS加權大盤trend chart 答謝您
真的非常非常感謝您 Orz
真的感恩 Orz
作者: GBKEE    時間: 2011-7-11 20:14

回復 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掉






作者: andylin    時間: 2011-7-14 00:33

本帖最後由 andylin 於 2011-7-24 17:51 編輯

回復 21# GBKEE

大大真的謝謝您 Orz
真的非常感謝您
讓小弟功力提昇至另一層級
真的感恩
再三感謝您 Orz
作者: andylin    時間: 2011-7-15 00:52

本帖最後由 andylin 於 2011-7-24 17:53 編輯

回復 21# GBKEE


大大您好
對不起 又來麻煩您 Orz

我將前一個大大所傳授的Excel VBA內容
努力理解後 試著依大大的程式碼語法 嘗試編寫國外商品
但我寫出來的沒回應  一.一"'
不知我程式碼那裡有誤
還請大大提攜指導 Orz

不知要怎樣寫
希望VBA能自動計算帶出的寫法
還有勞大大您撥伔指導 Orz

給您添麻煩了 Orz
真的感謝您
感恩 Orz
作者: GBKEE    時間: 2011-7-15 09:11

本帖最後由 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
作者: andylin    時間: 2011-7-16 13:19

本帖最後由 andylin 於 2011-7-24 17:54 編輯

大大謝謝您 Orz
真的感謝您
感恩 Orz
作者: andylin    時間: 2011-7-16 23:56

回復 24# GBKEE

大大 不好意思
小弟中文不好 英文不行
誤解了 還請見諒
我瞭解ps的意思了
今後還請各位先進賢拜不吝指導

感恩感恩 Orz Orz
作者: andylin    時間: 2011-7-21 02:04

本帖最後由 andylin 於 2011-7-24 17:55 編輯

回復 24# GBKEE

大大您好
對不起
不才小弟又來麻煩您

這次想把附檔"table"裡的三個欄位: B2  C2  D2的數值
希望能依1分/5分/15分 分別定時定存入 1分/5分/15分 sheets裡list出數據來
不曉得您是否能再次指導小弟一番 Orz  Orz

有勞您撥伔指導
小弟感激不盡 Orz
若有待慢您之處還請您見諒
拜託您 Orz  Orz
作者: GBKEE    時間: 2011-7-21 07:33

回復 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
複製代碼

作者: andylin    時間: 2011-7-21 11:49

本帖最後由 andylin 於 2011-7-24 17:56 編輯

回復 28# GBKEE

大大您好
感謝您
感恩 Orz
作者: GBKEE    時間: 2011-7-21 12:47

回復 29# andylin
收市前有效 試試看
  1. 'ThisWorkbook模組的程序
  2. Private Sub Workbook_Open()    '此程式是檔案開啟時自動執行的程式
  3.     If MsgBox("啟動自動記錄資料??", vbYesNo) = vbNo Then Exit Sub
  4.     Sheets("1分K").UsedRange.Offset(1, 1) = ""       '  清除昨日資料
  5.     Sheets("5分K").UsedRange.Offset(1, 1) = ""
  6.     Sheets("15分K").UsedRange.Offset(1, 1) = ""
  7.     If Time >= #8:46:00 AM# And Time <= #1:30:00 PM# Then   '開市時間內開檔
  8.         資料輸入
  9.    ElseIf Time < #8:46:00 AM# Then                          '開市前內開檔
  10.         Application.OnTime #8:46:00 AM#, "ThisWorkbook.資料輸入"
  11.    End If
  12. End Sub
  13. Sub 資料輸入()
  14.     Dim E As Range
  15.     '''''''''''''''''''''''''''''''''''''
  16.     'Dim Ar()      'Ar陣列 ->  存入你要的數據
  17.     'Ar = Sheets("Table").Range("B2:D2").Value
  18.     '''''''''''''''''''''''''''''''''''''
  19.     Dim Ar(1 To 3)      'Ar陣列 ->  存入你要的數據
  20.     Ar(1) = [Table!B2]
  21.     Ar(2) = [Table!C2]
  22.     Ar(3) = [Table!D2]
  23.     If Minute(Time) Mod 1 = 0 Then
  24.         Set E = Sheets("1分K").Range("A:A").Find(TimeSerial(Hour(Time), Minute(Time), 0))
  25.         E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 1=0  每分鐘
  26.     End If
  27.     If Minute(Time) Mod 5 = 0 Then
  28.         Set E = Sheets("5分K").Range("A:A").Find(TimeSerial(Hour(Time), Minute(Time), 0))
  29.         E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 5=0  每5分鐘
  30.     End If
  31.     If Minute(Time) Mod 15 = 0 Then
  32.         Set E = Sheets("15分K").Range("A:A").Find(TimeSerial(Hour(Time), Minute(Time), 0))
  33.         E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 15=0  每15分鐘
  34.     End If
  35.     If Time <= #1:30:00 PM# Then Application.OnTime TimeValue(Format(Time, "hh:MM:00")) + #12:01:00 AM#, "ThisWorkbook.資料輸入"
  36.     ' ***  #1:30:00 PM# 之前時間執行程式 ->資料輸入
  37.     Set E = Nothing    '
  38. End Sub
複製代碼

作者: andylin    時間: 2011-7-21 13:37

回復 30# GBKEE


    Trying...  努力中 Orz
作者: andylin    時間: 2011-7-21 13:49

回復 31# andylin


    梅友回應哩 Orz
作者: andylin    時間: 2011-7-21 13:51

回復 30# GBKEE

梅友回應哩
明天我再素看看 Orz
朵解大大 Orz Orz
作者: andylin    時間: 2011-7-21 13:53

本帖最後由 andylin 於 2011-7-24 17:56 編輯

我明日再try看看
作者: andylin    時間: 2011-7-21 14:17

本帖最後由 andylin 於 2011-7-24 17:57 編輯

回復 30# GBKEE


大大謝謝您 Orz
您的程式碼 真的很神!!!

真的非常謝謝您 Orz
感恩 Orz
作者: andylin    時間: 2011-7-22 14:43

本帖最後由 andylin 於 2011-7-24 17:57 編輯

回復 30# GBKEE

神人大大 您好 Orz
今日我一大早就開起電腦
中午時稍微喵一下
電腦自動有在記錄ing
一時大興奮  把筆電換位置
拔開電源供應線  讓筆電暫時吃電池電源
ㄚ知從那個摩們開始  小黑筆電就停住在那美麗贖刻
就一直掛在那  都無動於衷  按什麼都沒用 暖開機也沒用  (拼老命一直手也按  心裡也岸 :@ )
只好眼睜睜看不動如山的筆電到收盤
再給它硬開機

下週一再來test 了
下次會知道 在run時  不可拔筆電電源  以免電腦shut down  Orz
下週再與您分享 您程式碼的結果 :D

神人大大 感謝您  :D
感謝  再感謝 Orz Orz
作者: GBKEE    時間: 2011-7-22 15:00

本帖最後由 GBKEE 於 2011-7-22 15:01 編輯

回復 36# andylin

收市時間之前,重新開檔 都會記錄資料      重新開檔就好了 為何暖開機也沒用
修改為 選擇清除已存在的資料 的詢問
  1. 'ThisWorkbook模組的程序
  2. Private Sub Workbook_Open()    '此程式是檔案開啟時自動執行的程式
  3.     If MsgBox("清除已存在的資料??", vbYesNo) = vbYes Then
  4.           Sheets("1分K").UsedRange.Offset(1, 1) = ""       '  清除已存在的資料
  5.           Sheets("5分K").UsedRange.Offset(1, 1) = ""
  6.           Sheets("15分K").UsedRange.Offset(1, 1) = ""
  7.     End If
  8.     If Time >= #8:46:00 AM# And Time <= #1:30:00 PM# Then   '開市時間內開檔
  9.         資料輸入
  10.    ElseIf Time < #8:46:00 AM# Then                          '開市前內開檔
  11.         Application.OnTime #8:46:00 AM#, "ThisWorkbook.資料輸入"
  12.    End If
  13. End Sub
複製代碼

作者: andylin    時間: 2011-7-22 16:56

大大 不好意思  小弟傻傻分不清楚
今日中午是電腦真的是屎當 怎麼按都沒用 只好等到盤後才敢關電源
可能是我小筆電負荷不了 每次record 風扇就開始狂叫
下週一再來test看看 雖然今天因此沒能save到今日的資料
不過今日能有東西跑出來 已經非常開心了

真的非常謝謝您
感恩感恩 Orz Orz
作者: andylin    時間: 2011-7-24 17:58

回復 31# andylin

版大您好
我真沒有偷灌水...Orz
作者: albertbug    時間: 2011-7-26 14:59

剛好需要用到這一系列的文章
慢慢開始研究吧  我的Private Sub Worksheet_Calculate()一直沒有觸發
不知道到底是哪邊出問題  ??XD糗




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)