返回列表 上一主題 發帖

[發問] 如何將DEE連結到Excel的資料,依照想要的時間記錄下來.

[發問] 如何將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)..~

我是新手,有很多地方不懂,請見諒.
麻煩各位大大~~

附上簡單表格
紀錄.rar (1.5 KB)

本帖最後由 GBKEE 於 2010-11-14 19:01 編輯

回復 1# aries
成交價的變動一分鐘以內, 可能就有變化,或幾分鐘都沒變化.所以應設計為成交價有變動,時紀錄下來.
看盤軟體,傳回成交價的變動時,會引發工作表的重算Calculate   
請依照下列步驟試試看
1指令- 工具-選項-計算 - 計算方式   勾選  [自動] 如圖



2請將程式碼複製到VBA視窗 的 Sheet1物件裡
  1. Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
  2.     Static i%
  3.     'Static 陳述式  在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
  4.      With Sheet2.Cells(Rows.Count, i + 1).End(xlUp).Offset(1).Resize(1, 3)
  5.         If .Cells(1, 3).Offset(-1) <> [C2] Then   '成交價有異動時的條件成立時
  6.             .Value = [A2:C2].Value                '將Shse1的日期,時間,成交價記錄到Sheet2
  7.         End If
  8.         If .Row = 100 Then i = i + 3     '到第100列時右移3欄
  9.     End With
  10. End Sub
複製代碼
3於開盤前開啟檔案 試試看

TOP

回復 2# GBKEE


    謝謝 GBKEE 板主大大的解答,我試試看.

TOP

本帖最後由 aries 於 2010-11-16 13:12 編輯

回復 2# GBKEE


   版主大大,我開啟檔案執行巨集之後,出現執行階段錯誤'13': 型態不符合,
   偵錯之後,跳出程式碼 顯示這段
   If .Cells(1, 3).Offset(-1) <> [C2] Then   '成交價有異動時的條件成立時   
   然後我在程式碼要點擊偵錯,或執行的時候,發現程式有開始在跑了.Excel檔案有開始在記錄了.
   我就關閉檔案再重新開始,還是一樣出現執行階段錯誤的訊息.
   這是哪裡的問題呢?  
   再麻煩大大了

TOP

If .Cells(1, 3) 把中間那個"."刪了!

TOP

回復 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   依然會產生應用程式或物件定義上的錯誤

TOP

本帖最後由 aries 於 2010-11-16 20:09 編輯

回復 5# oobird
      刪掉之後,在程式碼底下執行,就直接出現 GBKEE大大 說的錯誤訊息了.

回復 6# GBKEE

      附上執行之後的檔案.
      另外,其中有些記錄到第99列就跳行,有些又可以到第100列,不知是什麼問題.
      再麻煩大大了.
      謝謝各位大大的幫忙.

       紀錄.rar (12.32 KB)

TOP

可能重新佈署一下會好一點
新增一般模組
輸入程式碼
  1. Public i%
  2. Sub auto_open()
  3. With Sheet2
  4. k = .[IV1].End(xlToLeft).Column
  5. i = IIf(k = 1, 0, k - 3)
  6. If i = 0 Then .[A1:C1].Value = Sheet1.[A1:C1].Value
  7. End With
  8. End Sub
複製代碼
Sheet1模組
  1. Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
  2.     Dim A As Range
  3.     'Static 陳述式  在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
  4.      With Sheet2
  5.      Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
  6.      If A.Row > 100 Then i = i + 3: .Cells(1, i + 1).Resize(, 3) = [A1:C1].Value '到第100列時右移3欄
  7.      Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
  8.        If A.Cells(1, 3).Offset(-1) <> [C2] Then   '成交價有異動時的條件成立時
  9.             A.Value = [A2:C2].Value                '將Shse1的日期,時間,成交價記錄到Sheet2
  10.        End If
  11.     End With
  12. End Sub
複製代碼
紀錄.zip (10.81 KB)
學海無涯_不恥下問

TOP

回復 8# Hsieh

感謝Hsieh版主大大,重新用過的程式碼,就都會固定到100列就換行,還有自己會增加標題列,很方便.

不過,在開啟檔案執行巨集之後,還是會出現執行階段錯誤'13': 型態不符合的視窗,我按偵錯之後,進入程式碼,
顯示 If A.Cells(1, 3).Offset(-1) <> [C2] Then   '成交價有異動時的條件成立時 這段碼底色會反黃.
而我如果不按偵錯,直接按結束,程式還是有開始執行,是可以使用的.

另外,如果這個錯誤訊息不容易解決,各位大大就不用在麻煩了.我猜測會不會是電腦或軟體的問題,而跟程式碼沒有關係.
反正原來的問題,已經有解決了.

再次感謝各位大大的幫忙指教.

TOP

本帖最後由 Hsieh 於 2010-11-17 18:13 編輯

此時的DDE是否還未傳入數據造成A2:C2出現錯誤值所致
  1. Private Sub Worksheet_Calculate() '這是Sheet1預設的重算觸動事件程式
  2.     Dim A As Range
  3.     'Static 陳述式  在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
  4.      With Sheet2
  5.      Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
  6.      If A.Row > 100 Then i = i + 3: .Cells(1, i + 1).Resize(, 3) = [A1:C1].Value '到第100列時右移3欄
  7.      Set A = .Cells(65536, i + 1).End(xlUp).Offset(1).Resize(, 3)
  8.      If IsError([C2].Value) Then Exit Sub
  9.        If A.Cells(1, 3).Offset(-1) <> [C2] Then   '成交價有異動時的條件成立時
  10.             A.Value = [A2:C2].Value                '將Shse1的日期,時間,成交價記錄到Sheet2
  11.        End If
  12.     End With
  13. End Sub
複製代碼
學海無涯_不恥下問

TOP

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