標題:
程式碼如何寫以紀錄EXCEL的DDE數據每秒鐘紀錄)(已解決)
[打印本頁]
作者:
jiuhtsair
時間:
2011-4-19 16:17
標題:
程式碼如何寫以紀錄EXCEL的DDE數據每秒鐘紀錄)(已解決)
本帖最後由 jiuhtsair 於 2011-8-23 17:55 編輯
各位大大好:
對於VBA我是新手!
在網路上看到許多高手寫出有關DDE紀錄的問題,但大多是紀錄一分鐘或是一分鐘以上的時間。曾嘗試將其更改成每秒紀錄一次,卻總是不得其門而入...
我想要把DDE傳給EXCEL的資料(時間、開盤價、最高價、最低價、收盤價、單量、成交量),依照時間每一秒紀錄一次(放在另一個工作表中),不知道能否請大大們協助?謝謝!
另外,能否介紹幾本VBA入門書,在坊間有許多書,但看的眼花撩亂,也懇請大大們已過來人經驗介紹幾本好書...謝謝!
作者:
GBKEE
時間:
2011-4-19 16:36
回復
1#
jiuhtsair
Sub Ex()
Dim A As Date
A = Time
Do
DoEvents
If Time > A Then
A = Time
Sheet2.Range("A" & Rows.Count).End(xlUp).Offset(1) = Time & Sheet1.[A1]
'請自行修改->EXCEL的資料(時間、開盤價、最高價、最低價、收盤價、單量、成交量)
End If
Loop
End Sub
複製代碼
作者:
jiuhtsair
時間:
2011-4-19 21:00
感謝大大開示。曾研究了大大回答EXCEL的DDE數據每分鐘紀錄的文,可惜沒完全弄懂...這程式已經煩惱一星期了,感謝大大解除困惑。謝謝!
作者:
atuan207
時間:
2011-4-19 21:12
我也還是新手,雖然程式的部分還沒辦法給予幫助,不過書籍的話可以推薦給你
Excel VBA 2007 程式設計全圖解 電腦人文化 出版
作者:七條達弘 渡邊健 ...等人注
這本說的還蠻詳細的,我目前自學三週,雖然沒辦法像版主他們程式打得很精簡,
要什麼有什麼,但是已經可以自己做出一些基本功能,
上一步、下一步、在介面中輸入資料並送回..等功能
且書中的範例可以下載
網址:http://www.pcuser.com.tw/download/2AC710/samples.zip
推薦給你~~
作者:
jiuhtsair
時間:
2011-4-20 12:14
謝謝分享!我也找到個不錯的教學網站
http://210.240.125.13/phcno1/index.htm 請參考!
作者:
jiuhtsair
時間:
2011-4-24 12:43
我將程式碼貼上後,它告訴我"執行階段錯誤424,此處需要物件"
但沒有看到他所指的錯誤區域在哪裡,請問這要如何改呢?
另外,DDE傳回的時間是值=(X小時*3600+Y分鐘*60)/86400,不知道這樣把設A=Time會不會有問題,我是否要先將(X小時*3600+Y分鐘*60)/86400轉化成 "X小時:Y分鐘:Z秒鐘"的型態呢?
謝謝!
作者:
jiuhtsair
時間:
2011-4-24 13:21
抱歉!怕陳述的不清楚,我把我的DDE檔案也傳上來。懇請網上大大解惑!謝謝!
想要做的功能就是把sheet1的內容每秒鐘(a2儲存格內容變化時動作)存入Sheet2中!希望能夠紀錄一整天以便分析參考。謝謝!
[attach]5789[/attach][attach]5789[/attach][attach]5789[/attach]
作者:
GBKEE
時間:
2011-4-24 15:38
回復
7#
jiuhtsair
試試看
Sub Ex()
Dim A As Single
A = 0.361111 '時間 上午 08:40:00
j = 2
Do
DoEvents
'If Sheets(2).Cells(j, 2) > A Then
' A = Sheets(2).Cells(j, 2)
If Sheets(1).Cells(2, 1) > A Then 'SHEETS(1)的A2大於 時間
A = Sheets(1).Cells(2, 1) '更改時間為SHEETS(1)的A2
' -- 附檔 Sheets(1).Cells(3, 5)...... 為空白 --
'Sheets(2).Cells(j, 2) = Sheets(1).Cells(3, 5)
'Sheets(2).Cells(j, 3) = Sheets(1).Cells(3, 6)
'Sheets(2).Cells(j, 4) = Sheets(1).Cells(3, 7)
'Sheets(2).Cells(j, 5) = Sheets(1).Cells(3, 8)
'Sheets(2).Cells(j, 6) = Sheets(1).Cells(3, 9)
'Sheets(2).Cells(j, 7) = Sheets(1).Cells(3, 10)
Sheets(2).Cells(j, 2).Resize(1, 6) = Sheets(1).Cells(2, 5).Resize(1, 6).Value
O = 0
H = -99999
l = 99999
cumVol = V
j = j + 1
End If
Loop
End Sub
複製代碼
作者:
jiuhtsair
時間:
2011-4-24 16:40
感謝大大解惑!
程式碼19行到22行,當初是看其他程式仿造的,如果我沒有用到它的運算式(他原先是利用第一個價錢為開盤價O,第二個價錢如果高於第一個,那最高價就是第二個,如果第二個價錢低於第一個,那最低價就是第二個...)我是否可以把它去除?
明天開盤後試試!感謝!
作者:
jiuhtsair
時間:
2011-4-24 16:45
ㄏㄏ..感謝!OK了!
我用手動方式改變時間...執行程式後一如所願!
謝謝大大解惑。感謝!
作者:
ABK
時間:
2018-4-25 00:33
回復
8#
GBKEE
版大您好! 我用Excel2016版, 跑程式碼卡住了,是哪裡有問題?
資料源 我改成元大RTD了!
作者:
GBKEE
時間:
2018-4-25 13:47
回復
11#
ABK
Sheets("1")的A 2 公式=RTD("money.excel",,"*SYSTEM","ServerTime")
是否傳回#N/A (錯誤值),導致程式錯誤試試看
Sub Ex()
Set MyBook = ThisWorkbook
Set Sht1 = MyBook.Sheets("1")
Dim A As Single
A = 0.361111 '時間 上午 08:40:00
j = 2
Do
DoEvents
'********測試用 ******************************************
If IsError(Sht1.Cells(2, 1)) Then Stop '傳回錯誤值 程式暫停
'**********************************************************
If Not IsError(Sht1.Cells(2, 1)) Then
If Sht1.Cells(2, 1) > A Then 'SHEETS(1)的A2大於 時間
A = Sht1.Cells(2, 1) '更改時間為SHEETS(1)的A2
Sht1.Cells(j, 2).Resize(1, 6) = Sht1.Cells(2, 5).Resize(1, 6).Value
O = 0
H = -99999
l = 99999
cumVol = V
j = j + 1
End If
End If
Loop
End Sub
複製代碼
作者:
ABK
時間:
2018-4-25 15:35
回復
12#
GBKEE
謝謝版大! 出現型態不符
作者:
GBKEE
時間:
2018-4-25 18:46
回復
13#
ABK
=RTD("money.excel",,"*SYSTEM","ServerTime")
這 式我沒有你的檔案無法測試
[attach]28603[/attach]
作者:
ABK
時間:
2018-4-25 22:30
回復
14#
GBKEE
謝謝版大! 按下偵錯後如附圖 !
附件我改成元大Yeswin 的 DDE。
15:00~ 隔日05:00 A2:J2 資料會變動 (午夜盤交易時段)
8:45 ~ 13:45 N2:W2 資料會變動 (日盤交易時段)
資料連結需先開啟 元大Yeswin 看盤軟體
作者:
GBKEE
時間:
2018-4-26 07:01
回復
15#
ABK
我只有台新證券公司的智多星可用.
可再試試看
Sub Ex()
Dim Sht1 As Worksheet, MyBook As Workbook, A As Date
Set MyBook = ThisWorkbook
Set Sht1 = MyBook.Sheets("1")
A = #8:40:00 AM#
'Date 函數 傳回一 Variant (Date),內容為系統日期 (電腦所記錄的現在日期)。
j = 2
Do
DoEvents
'********測試用 ******************************************
' If IsError(Sht1.Cells(2, 1)) Then Stop '傳回錯誤值 程式暫停
'**********************************************************
If Not IsError(Sht1.Cells(2, 1)) Then
''' MsgBox TypeName(Sht1.Cells(2, 1).Value)
If Sht1.Cells(2, 1) > A Then 'SHEETS(1)的A2大於 時間
A = Sht1.Cells(2, 1) '更改時間為SHEETS(1)的A2
Sht1.Cells(j, 2).Resize(1, 6) = Sht1.Cells(2, 5).Resize(1, 6).Value
O = 0
H = -99999
l = 99999
cumVol = V
j = j + 1
End If
End If
Loop
End Sub
複製代碼
作者:
ABK
時間:
2018-4-26 22:01
回復
16#
GBKEE
感謝版主 ! 可以記錄了!
目前是1秒鐘記錄一次, 如何修改 讓它1分鐘 記錄一次 ?
如果我要指定它在 15:00:00 (下午3點時自動停止) 要如何寫?
作者:
GBKEE
時間:
2018-4-27 09:17
本帖最後由 GBKEE 於 2018-4-27 09:41 編輯
回復
17#
ABK
試試看
Option Explicit
Sub Ex()
Dim Sht1 As Worksheet, MyBook As Workbook, Rng As Range
Dim xTime As Date
Set MyBook = ThisWorkbook
Set Sht1 = MyBook.Sheets("1")
xTime = Time '不要管Sht1.Cells(2, 1)的時間
Do
DoEvents
If Time >= xTime Then
xTime = TimeSerial(Hour(Time), Minute(Time) + 1, 0) '下一分鐘
Set Rng = Nothing
If Time >= #8:40:00 AM# And Time <= #1:30:00 PM# Then '日盤
Set Rng = [N2:W2]
ElseIf Time >= #2:59:50 PM# Or Time <= #5:00:10 AM# Then
'時間要跨過隔日
'http://forum.twbts.com/thread-20727-1-1.html
'夜盤 StartTime 14:59:50 / EndTime 隔日 05:00:10
Set Rng = [A2:J2]
End If
If Not Rng Is Nothing Then
With Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Resize(, Rng.Count) = Rng.Value
End With
End If
End If
Loop
End Sub
複製代碼
作者:
ABK
時間:
2018-4-27 15:56
回復
18#
GBKEE
謝謝版大 ! 可以跑了!
紀錄時間都在58秒 是我的電腦時間比卷商主機時間(A2儲存格) 快2秒的原因!
作者:
yen956
時間:
2018-5-4 15:04
本帖最後由 yen956 於 2018-5-4 15:05 編輯
ABK大大你好:
請問大大, 你是如何修改 標題 的?(如:加上 已解決)
是積分問題嗎? 我總是試不出來, 謝謝!!
作者:
ABK
時間:
2018-5-26 14:25
標題:
RE: 程式碼如何寫以紀錄EXCEL的DDE數據每秒鐘紀錄)(已解決)
回復
20#
yen956
Yen 大您好, 我是接續 jiuhtsair大的PO文發問的, 我發問時他的標題上就已經有(已解決)
你可以試試 在回復時,主題的右邊有 [修改], 按一下後再加入你要加入的字試試看 !
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)