標題:
[發問]
如何將DEE連結到Excel的資料,依照想要的時間記錄下來.
[打印本頁]
作者:
aries
時間:
2010-11-12 00:37
標題:
如何將DEE連結到Excel的資料,依照想要的時間記錄下來.
版主大大,各位前輩,大家好~
有個問題想請教一下大大們:
1.我把一個看盤軟體的三個數值用DDE導出到Excel裡了,現在想要將這三個數值,依照時間(例如:每1分鐘)
從Sheet1的(A2,B2,C2)要記錄到Shee2的(A2,B2,C2),然後依序往下紀錄(A3,B3,C3)(A4,B4,C4)....~.
2.另外,這個問題不知道方不方便做到,如果想要每100筆就跳回到第二列開始,譬如:
記錄到(A101,B101,C101)之後,下一筆就記錄到(D2,E2,F2),然後在依序往下紀錄(D3,E3,F3)..~
我是新手,有很多地方不懂,請見諒.
麻煩各位大大~~
附上簡單表格
[attach]3584[/attach]
作者:
GBKEE
時間:
2010-11-14 18:59
本帖最後由 GBKEE 於 2010-11-14 19:01 編輯
回復
1#
aries
成交價的變動一分鐘以內, 可能就有變化,或幾分鐘都沒變化.
所以應設計為成交價有變動,時紀錄下來
.
看盤軟體,傳回成交價的變動時,會引發工作表的重算Calculate
請依照下列步驟試試看
1
指令- 工具-選項-計算 - 計算方式 勾選 [自動]
如圖
[attach]3605[/attach]
2請將程式碼複製到VBA視窗 的 Sheet1物件裡
Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
Static i%
'Static 陳述式 在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
With Sheet2.Cells(Rows.Count, i + 1).End(xlUp).Offset(1).Resize(1, 3)
If .Cells(1, 3).Offset(-1) <> [C2] Then '成交價有異動時的條件成立時
.Value = [A2:C2].Value '將Shse1的日期,時間,成交價記錄到Sheet2
End If
If .Row = 100 Then i = i + 3 '到第100列時右移3欄
End With
End Sub
複製代碼
3於開盤前開啟檔案 試試看
作者:
aries
時間:
2010-11-15 08:45
回復
2#
GBKEE
謝謝 GBKEE 板主大大的解答,我試試看.
作者:
aries
時間:
2010-11-16 13:09
本帖最後由 aries 於 2010-11-16 13:12 編輯
回復
2#
GBKEE
版主大大,我開啟檔案執行巨集之後,出現執行階段錯誤'13': 型態不符合,
偵錯之後,跳出程式碼 顯示這段
If .Cells(1, 3).Offset(-1) <> [C2] Then '成交價有異動時的條件成立時
然後我在程式碼要點擊偵錯,或執行的時候,發現程式有開始在跑了.Excel檔案有開始在記錄了.
我就關閉檔案再重新開始,還是一樣出現執行階段錯誤的訊息.
這是哪裡的問題呢?
再麻煩大大了
作者:
oobird
時間:
2010-11-16 13:18
If .Cells(1, 3) 把中間那個"."刪了!
作者:
GBKEE
時間:
2010-11-16 15:56
回復
4#
aries
給你的程式碼 執行沒有錯誤啊 請附上你的檔案看看
回復
5#
oobird
If .Cells(1, 3) 把中間那個"."刪了!
你所要刪的
"."
是 With
Sheet2.Cells(Rows.Count, i + 1).End(xlUp).Offset(1).Resize(1, 3)
範圍的.Cells(1, 3).Offset(-1)
刪掉後的程式碼 If
Cells(1, 3).Offset(
-1
)
<> [C2] Then 依然會產生應用程式或物件定義上的錯誤
作者:
aries
時間:
2010-11-16 20:03
本帖最後由 aries 於 2010-11-16 20:09 編輯
回復
5#
oobird
刪掉之後,在程式碼底下執行,就直接出現 GBKEE大大 說的錯誤訊息了.
回復
6#
GBKEE
附上執行之後的檔案.
另外,其中有些記錄到第99列就跳行,有些又可以到第100列,不知是什麼問題.
再麻煩大大了.
謝謝各位大大的幫忙.
[attach]3621[/attach]
作者:
Hsieh
時間:
2010-11-16 22:59
可能重新佈署一下會好一點
新增一般模組
輸入程式碼
Public i%
Sub auto_open()
With Sheet2
k = .[IV1].End(xlToLeft).Column
i = IIf(k = 1, 0, k - 3)
If i = 0 Then .[A1:C1].Value = Sheet1.[A1:C1].Value
End With
End Sub
複製代碼
Sheet1模組
Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
Dim A As Range
'Static 陳述式 在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
With Sheet2
Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
If A.Row > 100 Then i = i + 3: .Cells(1, i + 1).Resize(, 3) = [A1:C1].Value '到第100列時右移3欄
Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
If A.Cells(1, 3).Offset(-1) <> [C2] Then '成交價有異動時的條件成立時
A.Value = [A2:C2].Value '將Shse1的日期,時間,成交價記錄到Sheet2
End If
End With
End Sub
複製代碼
[attach]3623[/attach]
作者:
aries
時間:
2010-11-17 18:01
回復
8#
Hsieh
感謝Hsieh版主大大,重新用過的程式碼,就都會固定到100列就換行,還有自己會增加標題列,很方便.
不過,在開啟檔案執行巨集之後,還是會出現執行階段錯誤'13': 型態不符合的視窗,我按偵錯之後,進入程式碼,
顯示
If A.Cells(1, 3).Offset(-1) <> [C2] Then '成交價有異動時的條件成立時
這段碼底色會反黃.
而我如果不按偵錯,直接按結束,程式還是有開始執行,是可以使用的.
另外,如果這個錯誤訊息不容易解決,各位大大就不用在麻煩了.我猜測會不會是電腦或軟體的問題,而跟程式碼沒有關係.
反正原來的問題,已經有解決了.
再次感謝各位大大的幫忙指教.
作者:
Hsieh
時間:
2010-11-17 18:03
本帖最後由 Hsieh 於 2010-11-17 18:13 編輯
此時的DDE是否還未傳入數據造成A2:C2出現錯誤值所致
Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
Dim A As Range
'Static 陳述式 在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
With Sheet2
Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
If A.Row > 100 Then i = i + 3: .Cells(1, i + 1).Resize(, 3) = [A1:C1].Value '到第100列時右移3欄
Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
If IsError([C2].Value) Then Exit Sub
If A.Cells(1, 3).Offset(-1) <> [C2] Then '成交價有異動時的條件成立時
A.Value = [A2:C2].Value '將Shse1的日期,時間,成交價記錄到Sheet2
End If
End With
End Sub
複製代碼
作者:
aries
時間:
2010-11-18 10:06
回復
10#
Hsieh
感謝Hsieh版主大大,真的是這個問題,更新程式碼後已經解決了.
真是非常感謝大大的幫忙.
作者:
aries
時間:
2010-11-20 22:35
回復
10#
Hsieh
版主大大你好,我想請教一下,同樣的表跟記錄樣式,如果我想要資料相反過來紀錄,變成歷史資料一直往後推,在(A2,B2,C2)永遠的是保持最新的,
不知道有沒有辦法?
因為我可能會抓最新的50筆或100筆之類的數據來做一些計算(類似內容),所以想要抓取固定欄位來計算.(現在最新的數據都是一直往後推)
再麻煩大大解惑一下. ^^
[attach]3665[/attach]
作者:
Hsieh
時間:
2010-11-20 22:44
你試著錄製A2:C2插入儲存格
再填入就行了
作者:
aries
時間:
2010-11-22 16:32
回復
13#
Hsieh
版主大大,請教一下,我錄製好之後,應該加入在原來程式碼中哪一個位置呢?
我自己有試著加入執行,但是,都不是正確的結果.
以下是錄製出來的程式碼:
Sub Macro1()
'
' Macro1 Macro
Range("A2:C2").Select
Selection.Insert Shift:=xlDown
End Sub
我是新手很多不懂,真是抱歉,再麻煩大大解惑了.
作者:
Hsieh
時間:
2010-11-22 21:03
回復
14#
aries
Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
Dim A As Range
With Sheet2
.[A2:C2].Insert xlShiftDown
Set A = .Cells(2, 1).Resize(, 3)
If A.Row > 100 Then i = i + 3: .Cells(1, i + 1).Resize(, 3) = [A1:C1].Value '到第100列時右移3欄
Set A = .Cells(2, i + 1).Resize(, 3)
If IsError([C2].Value) Then Exit Sub
If .[C3] <> [C2] Then '成交價有異動時的條件成立時
A.Value = [A2:C2].Value '將Shse1的日期,時間,成交價記錄到Sheet2
Else
.[A2:C2].Delete xlShiftUp '未異動價格就刪除插入的
End If
End With
End Sub
複製代碼
作者:
aries
時間:
2010-11-23 09:20
回復
15#
Hsieh
謝謝版主大大,已經可以在A2~C2保持是最新資料,但是現在無法到100列之後換行,變成一直在A~C往下紀錄而已.
抱歉,再麻煩大大了,謝謝!!
作者:
Hsieh
時間:
2010-11-23 11:21
回復
16#
aries
Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
Dim A As Range
If IsError([C2].Value) Then Exit Sub
With Sheet2
i = .[IV1].End(xlToLeft).Column - 2
'If .[C3] <> [C2] Then '成交價有異動時的條件成立時
If .Cells(65536, i).End(xlUp).Row = 100 Then i = i + 3: .Cells(1, i).Resize(, 3).Value = [A1:C1].Value
.Cells(2, i).Resize(, 3).Insert xlShiftDown
.Cells(2, i).Resize(, 3) = [A2:C2].Value '將Shse1的日期,時間,成交價記錄到Sheet2
'End If
End With
End Sub
複製代碼
作者:
aries
時間:
2010-11-24 09:25
本帖最後由 aries 於 2010-11-26 10:25 編輯
回復
17#
Hsieh
謝謝版主大大,再打擾你了.現在可以換行了,只是換行之後最新資料也跟著換行了.
A~C變成舊資料,有辦法讓A~C都是最新的資料,而舊資料一直往A~C之後移動嗎?
另外,我執行中有出現錯誤訊息,後來發現是因為欄位不足,已經跑到IV,我就改到3000列在換行,就正常了.
抱歉,再次麻煩大大.
作者:
aries
時間:
2010-11-27 14:19
本帖最後由 aries 於 2010-11-29 09:34 編輯
回復
17#
Hsieh
(因為前一封一開始忘了點回復,後來才編輯加入回復碼,不確定版主大大有沒有收到訊息,在寄一次)
謝謝版主大大,再打擾你了.現在可以換行了,只是換行之後最新資料也跟著換行了.
A~C變成舊資料,有辦法讓A~C都是最新的資料,而舊資料一直往A~C之後移動嗎?
另外,我執行中有出現錯誤訊息,後來發現是因為欄位不足,已經跑到IV,我就改到3000列在換行,就正常了.
抱歉,再次麻煩大大.
(我有想過,如果在滿3000列就換行,改成滿3000列就在ABC做插入動作,是不是就可以,再麻煩大大指教.)
版主大大,我有再仔細看過,發現成交價不管有沒有異動,都會一直紀錄,不知道是哪裡的問題?
作者:
aries
時間:
2010-12-7 03:45
回復
17#
Hsieh
版主大大,我想說直接用之前的不能跳行的好了,比較正常,您不用再麻煩了.
謝謝版主大大的指教.:)
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)