返回列表 上一主題 發帖

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

本帖最後由 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

回復 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

回復 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

回復 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

回復 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

本帖最後由 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

回復 51# j1221
沒有這問題 上傳你的檔案看看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 君子立恆志,小人恆立志。
返回列表 上一主題