返回列表 上一主題 發帖

[發問] 請問如何將以連接EXCEL的DDE數據每分鐘紀錄下來?

[發問] 請問如何將以連接EXCEL的DDE數據每分鐘紀錄下來?

板主,各位前輩大家好

其實這個問題,我之前已經在舊論壇拜讀過相關文章,尤其是jimmy大的那篇經典文章
因為小弟本身的做法和看盤軟體(我是用yeswin)跟之前jimmy大的不一樣
所以我把GBKEE大分享的程式碼稍微改了一下,可是還是不能用....故想請問GBKEE大,我該怎麼改才可以使用

請先讓我簡單說明我的設定:
1.小弟是先將所有我需要的資料(期權)全部都先集中在一個工作表(sheet 1)中(這可能跟其他前輩不一樣)
2.再挑出我今天關注的某一檔(比如說大台),再將大台的相關資訊指向第二個工作表(sheet 2)
3.我希望能將大台的每一分鐘資料都紀錄在sheet 2裡

也就是說,我不是直接紀錄DDE回傳的資料,我是紀錄sheet 1中資料格的變動,
所以我將GBKEE大的程式碼download改成了change,可是還是不能用....可否請問GBKEE大,我該怎麼改才可以使用?

請查閱我附上的檔案,感謝各位

DDE(Yeswin).xls.zip (25.87 KB)

我愛麻辣家族討論區!!

本帖最後由 GBKEE 於 2010-7-1 17:33 編輯

回復 1# j1221
試試看
  1. Private Sub Workbook_Open()
  2. If Time >= TimeValue("08:45:00") And Time <= TimeValue("13:45:00") Then
  3. Sheet2.[B7:G307] = ""
  4. change
  5. Else
  6. Application.OnTime "09:01:00", "ThisWorkbook.change"
  7. End If
  8. End Sub
  9. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  10. Private Sub change()
  11.     Dim TimeRange As Range, Rng As Range, R As Range
  12.     With Sheet2
  13.         Set TimeRange = .[A:A].Find(Format(TimeSerial(Hour(Time), Minute(Time), 0), "hh:mm"), LookIn:=xlValues)
  14.         Set Rng = TimeRange.Offset(, 1).Resize(1, 6)
  15.         Set R = Application.Evaluate(Mid(.Range("A3").Formula, 2))
  16.         'R 是A3的公式 =Data!B2 所指的位置
  17.     End With
  18.     Rng.Value = R.Offset(, 1).Resize(, 6).Value
  19.     If Time > TimeValue("13:45:00") Then Exit Sub
  20.     Application.OnTime Now + TimeValue("00:01"), "ThisWorkbook.change"
  21. End Sub
複製代碼

TOP

本帖最後由 j1221 於 2010-7-2 09:00 編輯

回復 2# GBKEE


先謝謝GBKEE大的回復!!

小弟剛剛試了,貼上程式碼後按F5執行,出現「沒有設定物件變數或 With 區塊變數 (錯誤 91)」的訊息.....
偵錯後,顯示有問題的部份為『Set Rng = TimeRange.Offset(, 1).Resize(1, 6)』,可否請問這是什麼原因呢?

還有另一問想請教您,可否請問您為什麼需要
『Set R = Application.Evaluate(Mid(.Range("A3").Formula, 2))
        'R 是A3的公式 =Data!B2 所指的位置』

因為我實際上想要記錄的是將Sheet1 的C2-H2記錄至Sheet2的B7-G7,然後依時間順序往下記錄
Sheet1!A3 指向Sheet2!B2 只是我為了要方便辨認目前記錄的項目,請問您這樣設定是有什麼特別的作用嗎?

再次謝謝您的幫助
我愛麻辣家族討論區!!

TOP

回復 3# j1221
出現「沒有設定物件變數或 With 區塊變數 (錯誤 91)」的訊息.....

請問你測試時的時間是Sheet2的A欄裡有的時間嗎?
2.再挑出我今天關注的某一檔(比如說大台),再將大台的相關資訊指向第二個工作表(sheet 2)

根據你說的 所以->   Set R = Application.Evaluate(Mid(.Range("A3").Formula, 2))
    ** R 是A3的公式 =Data!B2 所指的位置 ->今天關注的某一檔

如果你要
實際上想要記錄的是將Sheet1 的C2-H2記錄至Sheet2的B7-G7

那你改成 Rng.Value = Sheet1.[C2:H2].Value

TOP

回復 4# GBKEE

感謝GBKEE大的回答

我已經改好了。

我是在開盤前,就打開excel檔,我sheet2上的第一個時間是8:45,所以這就是出問題的原因嗎?

那....請問您我該怎麼克服這個情形?等開盤後再打開excel檔?
我愛麻辣家族討論區!!

TOP

回復 5# j1221
下週一 08:45 前開啟檔案測試看看
  1. Private Sub Workbook_Open()
  2. Sheet2.[B7:G307] = ""
  3. If Time >= TimeValue("08:45:00") And Time <= TimeValue("13:45:00") Then
  4. change
  5. Else
  6. Application.OnTime "08:45:00", "ThisWorkbook.change"
  7. End If
  8. End Sub
複製代碼

TOP

回復 6# GBKEE


謝謝GBKEE大,

我改了,也在剛剛試了,可是卻還是跳出同樣的錯誤訊息,是否是因為我在sheet3有外加圖表的問題?

可否附上附件,請您再幫我看一下?

DDE(Yeswin).rar (18.53 KB)

我愛麻辣家族討論區!!

TOP

回復 7# j1221
   
  1. Private Sub Achange()
  2.     Dim TimeRange As Range, Rng As Range, R As Range
  3.     With Sheet2
  4.         Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), 0), LookIn:=xlFormulas)
  5.         Set Rng = TimeRange.Offset(, 1).Resize(1, 6)
  6.     End With
  7.     Rng.Value = Sheet1.[C2:H2].Value
  8.     If Time > TimeValue("13:45:00") Then Exit Sub
  9.     Application.OnTime Now + TimeValue("00:01"), "ThisWorkbook.change"
  10. End Sub
複製代碼

TOP

回復 8# GBKEE


感謝GBKEE大,已經可以用了!!!!

但可否請問,之前不能用是因為甚麼問題呢?

此外,若我還想再增加儲存格,是否只要改動儲存格範圍就可以了?

因為我今天確認可以用之後,想說多加幾格試試看,為了便於觀看,我空了一整行當作分隔線,之後才增加我的儲存格

也就是說我是這樣使用的  --->>   資料 | 空格|資料

結果它依舊只會更新最早指定的那些儲存格,這是因為我中間有空格的關係嗎?還是其實並沒有差別?

再次感謝您
我愛麻辣家族討論區!!

TOP

回復 9# j1221
Set TimeRange = .[A:A].Find(Format(TimeSerial(Hour(Time), Minute(Time), 0), "hh:mm"), LookIn:=xlValues) 多了一個h   因為 儲存格時間格式是 h:mm

改成直接尋找時間就不容易出錯
Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), 0), LookIn:=xlFormulas)

也就是說我是這樣使用的  --->>   資料 | 空格|資料 ???  不太暸解 請附檔看看

TOP

        靜思自在 : 手心向下是助人,手心向上是求人;助人快樂,求人痛苦。
返回列表 上一主題