返回列表 上一主題 發帖

[發問] 我也想問DDE利用Private Sub Worksheet_Calculate()取資料方式

[發問] 我也想問DDE利用Private Sub Worksheet_Calculate()取資料方式

各位大大你們好
我知道我很嫩
但是近日剛好有需求想要請教各位大大

先在Sheet1(Sheet1)上打上
其他大大的神奇程式(如下)

Private Sub Worksheet_Calculate()
Dim NowDateTime, nowTime, startTime, stopTime
Dim tr As String

NowDateTime = Now  '現在的時間值, 去掉整數部份,
nowTime = (NowDateTime - Int(NowDateTime)) '得到現在的時間值
startTime = Range("A6") '開盤時間, 例如: "09:00:00 AM"
stopTime = Range("A8")  '收盤時間, 例如: "01:30:00 PM"

If nowTime <= startTime Then  '尚未開盤
    Exit Sub
ElseIf nowTime > stopTime Then '已經收盤
    Exit Sub
Else
    If [C2] <> "-" And [C2] <> "###" Then   '清盤的狀態, 不取其資料
        tr = Int((nowTime - startTime) * 288) + 2  '每差 300 秒就換一列
        If Range("D" & tr) = "" Then Range("D" & tr) = Range("C2")  '開始價
        If Range("E" & tr) = "" Or Range("C2") > Range("E" & tr) _
            Then Range("E" & tr) = Range("C2")                      '最高價
        If Range("F" & tr) = "" Or Range("C2") < Range("F" & tr) _
            Then Range("F" & tr) = Range("C2")                      '最低價
        Range("G" & tr) = Range("C2")                               '結束價
    End If
End If
End Sub

但最後還是無法存取
不知道哪邊錯誤了  還是要打在ThisWorkbook那邊呢???
我是使用富邦e01 DDE存取資料放在C2

再請各位大大了 我有爬文但是還是不會 感謝

所謂的 "無法存取" 不知道是什麼情形?
1. 盤中該跳動的數字不會跳動?
2. 還是出現錯誤訊息,例如: "無法存取遠端資料" 或是 "某某程式無法開啟?"
3. 亦或是 結果儲存格內容無法跟著來源儲存格內容變動?

因訊息不足所以只能先用猜的 :
1. 先檢查一下是否之前有調整過設定變成是 "手動計算" 或是 "儲存前再計算" 之類的設定.

2. 該看盤程式應比Excel檔先執行,還應確認已登入並正常連線以接收行情資料中,
又或者是儲存格內的公式是否不正確-
可以考慮依看盤軟體所提供的功能看是直接轉成(或匯出到)Excel檔 或是 可直接拖曳到儲存格上.
再依其規律推導出正確的公式. (例如不同股票代號 與 不同價別名稱(買進價, 成交價...)間公式的差異)
3. 先確認來源儲存格變動情形正常,再確認結果儲存格公式是否正常.

TOP

感謝大大幫忙回覆
1.數字是會跳動的
2.無錯誤訊息
3.我設定為D E F G 跟著C2變化 但是D E F G從來沒有出現過數值過??

檢查後
1.正常
2.好像是這邊出問題 我改用元大DDE後就出現程式錯誤 不過正在摸熟錯誤碼中
  似乎是富邦e01使用為格式問題
3.目前就在疑惑 根據我的解讀 是否 D E F G就應該開始存取資料後換行持續紀錄
   但完全沒有動靜 感謝大大了

TOP

本帖最後由 luhpro 於 2011-7-27 02:36 編輯
檢查後
2.好像是這邊出問題 我改用元大DDE後就出現程式錯誤 不過正在摸熟錯誤碼中
  似乎是富邦e01使用為格式問題
3.目前就在疑惑 根據我的解讀 是否 D E F G就應該開始存取資料後換行持續紀錄
   但完全沒有動靜
albertbug 發表於 2011-7-26 21:54


2. 不同的看盤軟體會因為其 程式(或資料庫)名稱(位於 "|" 左方) 與 對價別名稱定義 的不同而有不同的套用公式,
一般來說不修改公式內容是不能直接抓到資料的,
請參閱這篇內的敘述來修改公式.
3. 請上傳該檔案以便大家判斷問題點在哪.

TOP

附件為測試檔案
A6為開始時間
A8為結束時間
C2的Data原本是想放入期貨跳動
但由於想測試整天所以是放上元大匯率跳動

再麻煩各位大大了
感謝

關於第二點修改公式部分已在學習感謝各位

VBA2.rar (8.13 KB)

TOP

本帖最後由 GBKEE 於 2011-11-12 06:44 編輯

回復 5# albertbug
[ 2011/11/12 更正 ]
試試看
  1. Private Sub Worksheet_Calculate()
  2.     Dim startTime, stopTime
  3.     Dim Tr As String, Time_Step As Date
  4.    
  5.     Time_Step = #12:05:00 AM#     '設定間隔時間: 5分鐘->300秒
  6.     'Time_Step = #12:00:01 AM#     '設定間隔時間: 1秒
  7.    
  8.     startTime = Range("A6") '開盤時間, 例如: "09:00:00 AM"
  9.     stopTime = Range("A8")  '收盤時間, 例如: "01:30:00 PM"
  10.     If startTime > Time Then  '尚未開盤
  11.         Exit Sub
  12.     ElseIf stopTime < Time Then '已經收盤
  13.         Exit Sub
  14.     Else     
  15.       If [C2] <> "-" And [C2] <> "###" Then   '清盤的狀態, 不取其資料
  16.             'Tr = Int((nowTime - startTime) * 1440) + 30  '每差 300 秒就換一列
  17.             Tr = Int((Time - startTime) / Time_Step) + 30 ' 每5分鐘一列 從第30列開始
  18.             If Range("D" & Tr) = "" Then Range("D" & Tr) = Range("C2")  '開始價
  19.             If Range("E" & Tr) = "" Or Range("C2") > Range("E" & Tr) _
  20.                 Then Range("E" & Tr) = Range("C2")                      '最高價
  21.             If Range("F" & Tr) = "" Or Range("C2") < Range("F" & Tr) _
  22.                 Then Range("F" & Tr) = Range("C2")                      '最低價
  23.             Range("G" & Tr) = Range("C2")                               '結束價
  24.         End If
  25.     End If
  26. End Sub
複製代碼

TOP

感謝大大的回覆
根據G大你的寫法 目前在 D E F G還是沒有數值寫入並且儲存

我學淺的看著Code
意思上我都懂 但是我覺得有點奇怪
為何沒有執行
If Range("D" & Tr) = "" Then Range("D" & Tr) = Range("C2")  這行
一開始假若沒有數值  會判斷錯誤合理

我的問題就是 數字會跳動 但是數直無法儲存  感謝各位!

TOP

回復 7# albertbug
建議你前面加上 Range("C" & tr) = Format(Time, "HH:MM:SS") 來看看
看看你附檔上66列-786列上有不連續的資料,資料是有記錄下來的.

TOP

真的有記錄下來  是我時間上的差異
導致tr數值比較大
太蠢了我
Sorry

好的 感謝大大 我來在好好研究一下這些資料
感謝各位

TOP

本帖最後由 albertbug 於 2011-7-27 18:48 編輯

各位大大 我還想做另外一件事情
每行D E F G
皆需要與上行D E F G比較值大小
(因為每行都會根據tr往下排序)
比較完後 根據判斷式輸出文字"+" or "-"

如此比較法要如何寫出

TOP

        靜思自在 : 君子如水,隨方就圓,無處不自在。
返回列表 上一主題