返回列表 上一主題 發帖

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

回復 39# bubu1019

Hello~

改成每秒的話,用這個:
  1. Private Sub change()
  2.     Dim TimeRange As Range, Rng As Range, R As Range
  3.     With Sheet8
  4.         Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), Second(Time)), LookIn:=xlFormulas)
  5.         Set Rng = TimeRange.Offset(, 1).Resize(1, 15)
  6.     End With
  7.     Rng.Value = Sheet1.[B8:P8].Value
  8.       
  9.     If Time > TimeValue("13:45:00") Then Exit Sub
  10.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.change"
複製代碼
但是記得也要把你的時間從hh:mm改成hh:mm:ss喔!

請試試看吧!
我愛麻辣家族討論區!!

TOP

小弟初來乍到,也因為想開始透過dde,利用vba的程式將想記錄的固定時間資料存取下來做一些運算
很高興有這麼多高手在此熱心分享
Jingyi

TOP

我也想學耶.真想來試試.可是看不太懂!!!!

TOP

太感謝.找了好久vba的寫法 但權限不足 無法下載 繼續學習

TOP

我也是權限不足無法下載,只能看看在旁邊羨慕與觀摩。
很抱歉,我是小學生,不能下載檔案,是個小屁孩!

TOP

可惜附件無法下載,先進的修改無法參照,實在是有看沒有懂。

TOP

這裡實在太精采了,我想學習學習,準備利用來使用卷商的RTD 數據記錄在excel裡,不知道可以這樣使用嘛?
人生只有三天,只有活在今天最踏實

TOP

回復 10# GBKEE

GBKEE大,不好意思,又來麻煩你。

之前請叫過您關於每分鐘記錄DDE的數據,現在我想要將它改成每5分鐘記錄一次,所以更動了一下程式碼。

但是出現「沒有設定物件變數或 With 區塊變數 (錯誤 91)」的訊息.....
偵錯後,顯示有問題的部份為『Set Rng = TimeRange.Offset(, 1).Resize(1, 11)』的地方,我檢查過之前出問題的地方,但是似乎跟之前的問題不一樣(已經又您之前提供的方式改過了)。

可否再請您幫我看一下呢?請詳見附檔。(資料源已經改為元大Yeswin RTD)感謝您

test.zip (198.79 KB)
我愛麻辣家族討論區!!

TOP

本帖最後由 GBKEE 於 2014-2-5 16:58 編輯

回復 48# j1221
因程式的 FIND 的時間 不一定落在00,05,10,15....分鐘的時間上
導致工作表A欄FIND不到而造成錯誤
  1. Dim xTime As String  '宣告為字串型態 僅ThisWorkbook模組的程序可用
  2. Private Sub Workbook_Open()
  3.     Sheets("TXF1").[B7:P19000] = ""
  4.     Sheets("MXF1").[B7:P19000] = ""
  5.     Sheets("EXF").[B7:P19000] = ""
  6.     Sheets("FXF").[B7:P19000] = ""
  7.     Sheets("TWT").[B7:P19000] = ""
  8.     Sheets("TWO").[B7:P19000] = ""
  9.     If Time >= TimeValue("08:45:00") And Time <= TimeValue("13:45:00") Then
  10.         '*** 營業時間內 不一定在 00,05,10,15....的分鐘上  ******
  11.         xTime = Minute(Time) - Minute(Time) Mod 5       '落在上一個 5分鐘 ,Mod:兩數相除的餘數
  12.         xTime = Format(TimeSerial(Hour(Time), xTime, 0), "h:mm:ss")
  13.         change
  14.     Else
  15.         xTime = "08:45:00"
  16.         Application.OnTime TimeValue(xTime), "ThisWorkbook.change"
  17.     End If
  18. End Sub
  19. Private Sub change()
  20.     Dim TimeRange As Range, Rng As Range, R As Range
  21.     ' ***  Time 時間點不一定落在5分鐘上 ********
  22.     'xTime為落在 00,05,10,15....的分鐘上的時間,可確定一定找得到
  23.     Set TimeRange = Sheets("TXF1").[A:A].Find(xTime, LookIn:=xlValues)  '改為 搜尋內容
  24.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  25.     Rng.Value = Sheets("Main").Range("C9:M9").Value
  26.    
  27.     Set TimeRange = Sheets("MXF1").[A:A].Find(xTime) '接下的Find會依據上一次Find的選項來搜尋
  28.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  29.     Rng.Value = Sheets("Main").Range("C11:M11").Value
  30.    
  31.     Set TimeRange = Sheets("EXF").[A:A].Find(xTime)
  32.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  33.     Rng.Value = Sheets("Main").Range("C12:M12").Value
  34.    
  35.     Set TimeRange = Sheets("FXF").[A:A].Find(xTime)
  36.     Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  37.     Rng.Value = Sheets("Main").Range("C13:M13").Value
  38.    
  39.     Set TimeRange = Sheets("TWT").[A:A].Find(xTime)
  40.     Set Rng = TimeRange.Offset(, 1).Resize(, 17)
  41.     Rng.Value = Sheets("Main").Range("C2:U2").Value
  42.    
  43.     Set TimeRange = Sheets("TWO").[A:A].Find(xTime)
  44.     Set Rng = TimeRange.Offset(, 1).Resize(, 20)
  45.     Rng.Value = Sheets("Main").Range("C3:U3").Value
  46.    
  47.     If Time > TimeValue("13:45:00") Then Exit Sub
  48.    
  49.     xTime = Minute(Time) + 5 - Minute(Time) Mod 5               '落在下一個5分鐘
  50.     xTime = Format(TimeSerial(Hour(Time), xTime, 0), "h:mm:ss") '落在 00,05,10,15....的分鐘的時間上
  51.     ' Now + TimeValue("00:05:00") ->不一定是落在 00,05,10,15....的分鐘上
  52.     Application.OnTime TimeValue(xTime), "ThisWorkbook.change"  '確實在下一個5分鐘點上執行
  53. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 48# j1221
以 "TXF1" 為例:
  1.     With Sheets("TXF1")
  2.         Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), Second(Time)), LookIn:=xlFormulas)
  3.         Set Rng = TimeRange.Offset(, 1).Resize(, 11)
  4.     End With
  5.     Rng.Value = Sheets("Main").Range("C9:M9").Value
複製代碼
建議修改為:
  1.     With Sheets("TXF1")
  2.         Set TimeRange = .[A:A].Find(TimeSerial(Hour(Time), Minute(Time), Second(Time)), LookIn:=xlFormulas)
  3.         If Not TimeRange Is Nothing Then
  4.             TimeRange.Offset(, 1).Resize(, 11) = Sheets("Main").Range("C9:M9").Value
  5.         End If
  6.     End With
複製代碼
Range.Find() 會試圖找到該項資訊的第一個儲存格,如果沒有找到符合的儲存格,
則此方法 "傳回値" 會傳回 Nothing。
當 TimeRange 值為 Nothing, 你原本的寫法則會出錯。

TOP

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題