返回列表 上一主題 發帖

[發問] DDE記錄資料求助

本帖最後由 c_c_lai 於 2013-4-24 04:36 編輯

回復 20# n8975067
  1. Sub updateFollow()
  2.     Dim Rng As Range
  3.    
  4.     With Sheet2
  5.         '  Set Rng = .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1)
  6.         '
  7.         '  Rng = Sheet1.[c2]
  8.         '  Rng.Offset(, 1) = Sheet1.[d2]
  9.         '  Rng.Offset(, 2) = Sheet1.[e2]
  10.         '  Rng.Offset(, 3) = Sheet1.[f2]
  11.         '  Rng.Offset(, 4) = Sheet1.[g2]
  12.         '  Rng.Offset(, 5) = Sheet1.[h2]
  13.         '  Rng.Offset(, 6) = Sheet1.[i2]
  14.         '  Rng.Offset(, 7) = Sheet1.[j2]
  15.         '  Rng.Offset(, 8) = Sheet1.[k2]
  16.         '  Rng.Offset(, 9) = Sheet1.[l2]
  17.         '  上面之敘述表達與下列的敘述結果是一樣的,差異只在於使用語法之巧妙不同。
  18.         Set Rng = .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1).Resize(1, 10)
  19.         
  20.         Rng(1) = Sheet1.[c2]
  21.         Rng(2) = Sheet1.[d2]
  22.         Rng(3) = Sheet1.[e2]
  23.         Rng(4) = Sheet1.[f2]
  24.         Rng(5) = Sheet1.[g2]
  25.         Rng(6) = Sheet1.[h2]
  26.         Rng(7) = Sheet1.[i2]
  27.         Rng(8) = Sheet1.[j2]
  28.         Rng(9) = Sheet1.[k2]
  29.         Rng(10) = Sheet1.[l2]
  30.     End With
  31.    
  32.     '  Application.OnTime Now + 60 / 86400#, "ThisWorkbook.updateFollow"    '  每一分鐘呼叫 一次
  33.     Application.OnTime Now + 300 / 86400#, "ThisWorkbook.updateFollow"      '  每五分鐘呼叫 一次
  34. End Sub
複製代碼
已傳給你了!
在 Sheet1 加上了啟動按鈕,方便你執行查核。

TOP

回復 21# c_c_lai
報告c_c_大,今天試用,已經可以記錄了,但是否是要按按鈕才會啟動?
另外我想要在早上0845時,每隔整數5分鐘開始記錄(例如0850 0900),我有看到您的另一篇文章,上面有提到方法,是照那上面的語法嗎?



PS:大大,有個地方我不太了解,為何會有五分鐘跟一分鐘的呼叫呢?

TOP

回復  c_c_lai
報告c_c_大,今天試用,已經可以記錄了,但是否是要按按鈕才會啟動?
另外我想要在早上084 ...
n8975067 發表於 2013-4-25 14:47

因為我要測試你所說的問題癥結,為節省測試時間,
所以我以每隔一分鐘一次,來觀察執行結果之故。
按鈕之用意,是在於當你要開始執行時方便你啟用,
而不須再到程式區啟動程式。
如此說明可以嗎?

TOP

回復 22# n8975067
如果你想要系統自動控管開盤、與關盤,
那麼你便要參考其他範例了!

TOP

回復 24# c_c_lai
c_c_大,我有找到一篇範例
http://forum.twbts.com/viewthrea ... a=pageD9&page=3
那我是否能將開盤收盤那行移植過來就可以使用?

TOP

回復 25# n8975067
  1. Option Explicit
  2. Dim timerEnabled As Boolean    ' 判定開啟本工作表單的時段是否為開盤前啟動。

  3. Private Sub Workbook_Open()
  4.     timerEnabled = False
  5.      
  6.     Call timerStart            ' 程式一啟始,便去自動執行 timerStart
  7. End Sub

  8. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  9.     On Error Resume Next
  10.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.RTimer", , False
  11.    
  12.     Me.Save
  13. End Sub

  14. Sub timerStart()   
  15.     If timerEnabled Then
  16.         ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。
  17.         Application.OnTime (Now + TimeValue("00:05:00")), "ThisWorkbook.updateFollow"    '  每隔五分鐘執行一次
  18.     Else
  19.         timerEnabled = True
  20.         
  21.         ' 將第一次啟動時間更改為設定 "開盤時間"前,如果開啟 Excel 時,已經過了設定 "開盤時間",則一進入系統即直接去執行紀錄作業。
  22.         If (TimeValue(Now) <= TimeValue("08:45:00")) Then
  23.             Application.OnTime (TimeValue("08:45:00")), "ThisWorkbook.updateFollow"
  24.         Else
  25.             ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  26.             ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  27.             Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.updateFollow"
  28.         End If
  29.     End If
  30. End Sub

  31. Sub updateFollow()
  32.     Dim Rng As Range
  33.    
  34.     On Error Resume Next
  35.     If (TimeValue(Now) < TimeValue("08:45:00") Or TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub

  36.     With Sheet2
  37.         '  Set Rng = .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1)
  38.         '
  39.         '  Rng = Sheet1.[c2]
  40.         '  Rng.Offset(, 1) = Sheet1.[d2]
  41.         '  Rng.Offset(, 2) = Sheet1.[e2]
  42.         '  Rng.Offset(, 3) = Sheet1.[f2]
  43.         '  Rng.Offset(, 4) = Sheet1.[g2]
  44.         '  Rng.Offset(, 5) = Sheet1.[h2]
  45.         '  Rng.Offset(, 6) = Sheet1.[i2]
  46.         '  Rng.Offset(, 7) = Sheet1.[j2]
  47.         '  Rng.Offset(, 8) = Sheet1.[k2]
  48.         '  Rng.Offset(, 9) = Sheet1.[l2]
  49.         '  上面之敘述表達與下列的敘述結果是一樣的,差異只在於使用語法之巧妙不同。
  50.         Set Rng = .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1).Resize(1, 10)
  51.         
  52.         Rng(1) = Sheet1.[c2]
  53.         Rng(2) = Sheet1.[d2]
  54.         Rng(3) = Sheet1.[e2]
  55.         Rng(4) = Sheet1.[f2]
  56.         Rng(5) = Sheet1.[g2]
  57.         Rng(6) = Sheet1.[h2]
  58.         Rng(7) = Sheet1.[i2]
  59.         Rng(8) = Sheet1.[j2]
  60.         Rng(9) = Sheet1.[k2]
  61.         Rng(10) = Sheet1.[l2]
  62.     End With
  63.    
  64.     If timerEnabled Then Call timerStart
  65. End Sub
複製代碼
我把你的 updateFollow() 與你的需求,全部整合在一起,
請將它全部覆蓋於 ThisWorkbook 程式碼編輯區塊內。
每日 08:45:00 以前開啟它 , 08:45:00時間一到,系統便會自動啟動執行,
13:45:00一超過時間,程式便會自動停止不再執行。
按鈕你可以保留,如果系統於突發狀況下停止運作,
你可以點選按鈕恢復系統運作。

TOP

回復 26# c_c_lai

感謝c_c_大,但我今天遇到一個問題,就是電腦突然當機無回應,強制關機後, 這個excel開啟都會"沒有回應",盤中的資料也沒有儲存下來,這是怎麼回是呢?

TOP

回復 27# n8975067
收收 E-Mail,下載後明天
你再用我的檔案試試看!

TOP

回復 26# c_c_lai
  1. Option Explicit
  2. Sub updateFollow()
  3.     Dim Rng As Range
  4.     With Sheet2
  5.         'Set Rng = .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1).Resize(1, 10)
  6.         Set Rng = .Range("A" & .Rows.Count).End(xlUp).Offset(1).Resize(1, 10) '這樣可簡略些
  7.         Rng = Sheet1.[c2:L12].Value        'C:L 共10欄,且為連續 可用如此語法
  8.         'Rng(1) = Sheet1.[c2]
  9.         'Rng(2) = Sheet1.[d2]
  10.         'Rng(3) = Sheet1.[e2]
  11.         'Rng(4) = Sheet1.[f2]
  12.         'Rng(5) = Sheet1.[g2]
  13.         'Rng(6) = Sheet1.[h2]
  14.         'Rng(7) = Sheet1.[i2]
  15.         'Rng(8) = Sheet1.[j2]
  16.         'Rng(9) = Sheet1.[k2]
  17.         'Rng(10) = Sheet1.[l2]
  18.     End With
  19.     '凌晨 零點零分       #12:00:00 AM#
  20.     '凌晨 零點零分30秒   #12:00:30 AM#
  21.     '凌晨 零點1分        #12:01:00 AM#
  22.     '凌晨 零點5分        #12:05:00 AM#
  23.     Application.OnTime Now + #12:00:30 AM#, "ThisWorkbook.updateFollow"     '  每30秒鐘呼叫 一次
  24. '  Application.OnTime Now + #12:01:00 AM#, "ThisWorkbook.updateFollow"     '  每一分鐘呼叫 一次
  25. '  Application.OnTime Now +  #12:05:00 AM#, "ThisWorkbook.updateFollow"    '  每五分鐘呼叫 一次
  26. '  Application.OnTime Now + 60 / 86400#, "ThisWorkbook.updateFollow"       '  每一分鐘呼叫 一次
  27. '  Application.OnTime Now + 300 / 86400#, "ThisWorkbook.updateFollow"      '  每五分鐘呼叫 一次
  28. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  c_c_lai
GBKEE 發表於 2013-4-29 16:01

好久沒聯絡了,近來順意吧!
Application.OnTime Now + 300 / 86400#, "ThisWorkbook.updateFollow"
是順應他原本的程式而未加以異動,我個人習慣用您指教的語法、
或是抓取某設定欄位作為動態處理,謝謝您!

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題