Board logo

標題: 執行時間問題? [打印本頁]

作者: mead    時間: 2012-6-7 17:22     標題: 執行時間問題?

各位大大:
附件的EXCEL我設定在8:45~13:45間執行
但每次在8:45前執行  以等待8:45開始記錄  但去都無法啟動程式紀錄
都必須等8:45後執行  程式才會啟動記錄!不知問題出在哪兒?
懇請版上大大協助修正

謝謝

感恩

[attach]11307[/attach][attach]11307[/attach]
作者: ANGELA    時間: 2012-6-7 20:05

If (TimeValue(Now) <= TimeValue("08:45:00") Or TimeValue(Now) >= TimeValue("13:45:00")) Then Exit Sub '營業時間才執行
若在8:45前或13:45以後即離開程式
作者: mead    時間: 2012-6-7 20:15

If (TimeValue(Now) = TimeValue("13:45:00")) Then Exit Sub '營業時間才執行
若在8:45前或13:45以後即離 ...
ANGELA 發表於 2012-6-7 20:05

Dear這我能理解
但問題是我在8:44執行程式後  過了8:45卻沒動作啊?
想問是甚麼原因和如何修正?

謝謝  感恩
作者: Hsieh    時間: 2012-6-7 20:28

回復 3# mead
因為在8:45以前開檔,雖然有執行一次Timer
但因為直接跳出程序,並未準備下一次執行Timer
判斷式改一下
  If TimeValue(Now) <= TimeValue("08:45:00") Then Application.OnTime Now + TimeValue("00:00:01"), "Timer"
  If TimeValue(Now) >= TimeValue("13:45:00") Then Exit Sub '營業時間才執行
作者: mead    時間: 2012-6-7 21:01

回復  mead
因為在8:45以前開檔,雖然有執行一次Timer
但因為直接跳出程序,並未準備下一次執行Timer
判 ...
Hsieh 發表於 2012-6-7 20:28

感謝總版主的指導
但照此修改  還是不行!
過了設定時間沒動作  退出再進入  即變成隨時在記錄了!
麻煩再指導

謝謝  感恩
作者: Hsieh    時間: 2012-6-7 21:51

回復 5# mead
  1. Sub Timer()

  2. Dim HHMMSS As Integer

  3. On Error Resume Next

  4. ' Sheets("策略記錄").Select

  5. Sheets(2).Cells(2, 1) = Time '將時間show至策略的a2欄位

  6.   If (TimeValue(Now) <= TimeValue("08:45:00") Or TimeValue(Now) >= TimeValue("13:45:00")) Then GoTo 10 '營業時間才執行

  7. ' If Minute(Time) <> LastMin Then '開始後做

  8.     i = i + 1

  9.     If i = 60 Then


  10. Sheets(2).Range("a10000").End(xlUp).Offset(1, 0) = Time

  11. Sheets(2).Range("a10000").End(xlUp).Offset(0, 1) = O

  12. Sheets(2).Range("a10000").End(xlUp).Offset(0, 2) = H

  13. Sheets(2).Range("a10000").End(xlUp).Offset(0, 3) = L

  14. Sheets(2).Range("a10000").End(xlUp).Offset(0, 4) = C

  15.   

  16. Sheets(2).Range("a10000").End(xlUp).Offset(0, 5) = O1

  17. Sheets(2).Range("a10000").End(xlUp).Offset(0, 6) = H1

  18. Sheets(2).Range("a10000").End(xlUp).Offset(0, 7) = L1

  19. Sheets(2).Range("a10000").End(xlUp).Offset(0, 8) = C1


  20. Sheets(2).Range("a10000").End(xlUp).Offset(0, 9) = O2

  21. Sheets(2).Range("a10000").End(xlUp).Offset(0, 10) = H2

  22. Sheets(2).Range("a10000").End(xlUp).Offset(0, 11) = L2

  23. Sheets(2).Range("a10000").End(xlUp).Offset(0, 12) = C2

  24.      i = 0

  25.       O = Sheets(2).Cells(2, 2)

  26.       H = Sheets(2).Cells(2, 2)

  27.       L = Sheets(2).Cells(2, 2)

  28.       C = Sheets(2).Cells(2, 2)

  29.         

  30.      O1 = Sheets(2).Cells(2, 3)

  31.      H1 = Sheets(2).Cells(2, 3)

  32.      L1 = Sheets(2).Cells(2, 3)

  33.      C1 = Sheets(2).Cells(2, 3)

  34.      

  35.      O2 = Sheets(2).Cells(2, 4)

  36.      H2 = Sheets(2).Cells(2, 4)

  37.      L2 = Sheets(2).Cells(2, 4)

  38.      C2 = Sheets(2).Cells(2, 4)

  39. Else

  40.      C = Sheets(2).Cells(2, 2)

  41.      If H = "" Then H = Sheets(2).Cells(2, 2)

  42.      If C >= H Then H = C

  43.      If C < L Then L = C

  44.      If O = 0 Then O = Sheets(2).Cells(2, 2) Else O = O

  45.      If L = 0 Then L = Sheets(2).Cells(2, 2) Else L = L

  46.    

  47.      C1 = Sheets(2).Cells(2, 3)

  48.      If H1 = "" Then H1 = Sheets(2).Cells(2, 3)

  49.      If C1 >= H1 Then H1 = C1

  50.      If C1 < L1 Then L1 = C1

  51.      If O1 = 0 Then O1 = Sheets(2).Cells(2, 3) Else O1 = O1

  52.      If L1 = 0 Then L1 = Sheets(2).Cells(2, 3) Else L1 = L1

  53.    

  54.      C2 = Sheets(2).Cells(2, 4)

  55.      If H2 = "" Then H2 = Sheets(2).Cells(2, 4)

  56.      If C2 >= H2 Then H2 = C2

  57.      If C2 < L2 Then L2 = C2

  58.      If O2 = 0 Then O2 = Sheets(2).Cells(2, 4) Else O1 = O1

  59.      If L2 = 0 Then L2 = Sheets(2).Cells(2, 4) Else L2 = L2

  60.   End If

  61.         LastMin = Minute(Time)

  62. '  End If
  63. 10
  64. Application.OnTime Now + TimeValue("00:00:01"), "Timer" '每秒顯示

  65. End Sub
複製代碼

作者: mead    時間: 2012-6-7 22:04

回復  mead
Hsieh 發表於 2012-6-7 21:51

感謝總版主這麼快回覆
剛剛測試的結果已可行
明天盤中再測試看看

謝謝總版主的熱心幫忙

感恩再感恩
作者: c_c_lai    時間: 2012-6-8 08:07

回復 7# mead
關鍵在於 Application.OnTime (TimeValue("08:45:00")), "Module1.Timer"  :
  1. Private Sub Workbook_Open()
  2.     Sheets("策略記錄").[a5:n700] = ""
  3.     ' LastMin = Minute(Time)
  4.     Application.OnTime (TimeValue("08:45:00")), "Module1.Timer"      ' *********
  5. End Sub



  6. Sub Timer()
  7.     Dim HHMMSS As Integer

  8.     On Error Resume Next

  9.     ' Sheets("策略記錄").Select
  10.     Sheets(2).Cells(2, 1) = Time '將時間show至策略的a2欄位

  11.     If (TimeValue(Now) >= TimeValue("13:45:00")) Then Exit Sub  ' 超過營業時間後即跳離不予執行
  12.     .
  13.     .
  14.     .
  15.     .
  16. End Sub
複製代碼
至於 Timer 修改一下  If (TimeValue(Now) >= TimeValue("13:45:00")) Then Exit Sub
其它部分依你所需去修正。
作者: mead    時間: 2012-6-8 18:07

回復  mead
關鍵在於 Application.OnTime (TimeValue("08:45:00")), "Module1.Timer"  :至於 Timer 修改 ...
c_c_lai 發表於 2012-6-8 08:07

感謝c_c_lai 大大的熱心回覆
先試試看
感恩
作者: devidlin    時間: 2012-6-23 18:12

請教版大哥,元大easywin之DDE,要如何將之前的EXCEL存檔,隔天依樣開此檔案,要如何設定?
謝謝。
作者: c_c_lai    時間: 2012-6-24 08:48

回復 10# devidlin
[attach]11475[/attach]
作者: devidlin    時間: 2012-6-24 09:07

感謝c_c_lai版大的回覆,小弟了解,但EXCEL 活頁簿1 ,可以明日一樣開啟使用相同檔案嗎?謝謝。
作者: c_c_lai    時間: 2012-6-24 09:27

回復 12# devidlin
OK 的! 甚至你可以加以整理歸類成你要的工作表單,如附圖提供你參考。
[attach]11476[/attach]
作者: devidlin    時間: 2012-6-24 14:14

感謝c_c_lai版大的回覆,好厲害哦 ,好佩服c_c_lai大的功力,檔案可以EMAIL: [email protected]   提供給我參考嗎?謝謝。
作者: c_c_lai    時間: 2012-6-25 09:04

回復 14# devidlin
不好意思,這個工作表單裡面的公式是屬於他人的授權,非經他人許可實無法外流,
故有礙於分享!
作者: devidlin    時間: 2012-6-25 13:08

感謝c_c_lai版大的回覆,另請教多家券商(元大yeswin及寶來點精靈)的dde報價在vba內要如何寫程式碼  ?   謝謝。
作者: c_c_lai    時間: 2012-6-25 14:21

本帖最後由 c_c_lai 於 2012-6-25 14:25 編輯

回復 16# devidlin
回復時請務必點選下方之回復選鈕,否則當事人是無法得知您已回復了,我是因為發現它才進來瞧瞧的。
請你參考:
請問高手要將以下DDE 每分鐘記錄改為30秒自動記錄一次要怎改
之 Page 2 我最後貼附的範例 "自動記錄每分鐘委買賣均值", 你就會明瞭了。
[attach]11485[/attach]
作者: devidlin    時間: 2012-6-26 07:52

回復 17# c_c_lai


    感謝c_c_lai版大的回覆,小弟有看程式碼,但是還是看不出來多家券商(元大yeswin及寶來點精靈)的dde在vba內程式碼的寫法  ? 可以註記出來嗎?    謝謝。
作者: c_c_lai    時間: 2012-6-26 09:03

本帖最後由 c_c_lai 於 2012-6-26 09:14 編輯

回復 18# devidlin
請參考附圖的說明,你應該會有所了解的。
[attach]11491[/attach]
VBA 只針對設定標的(Excel)執行,至於你是使用哪一家券商的軟體(DDE設定),並無限制;
它只是依照你匯入的DDE數據來做處裡的。
作者: devidlin    時間: 2012-6-26 13:52

回復 19# c_c_lai


    感謝c_c_lai版大的回覆,小弟初步了解,以  元大easy win的dde在每次須執行0720 dde excel畫面  ? 傳送至excel檔案,無法指定一個檔案名稱,每次開機後又要重設定一次,覺得很麻煩,是否有更快的方法?    謝謝。
作者: c_c_lai    時間: 2012-6-26 14:18

回復 20# devidlin
沒這回事, #13 的工作表單我已跑了 EasyWin 好幾年 (至少有五年以上) 了。
我還同時匯入 eLeader 的 DDE 的數據呢!
你可以將你的表單傳來,我來瞧瞧你是怎麼設定的。
作者: devidlin    時間: 2012-6-27 10:42

回復 21# c_c_lai


    小弟的寶來點精靈的檔案如附,小弟每次都是選擇(1013)DDE的畫面,輸出至NEW.XLS後才連結DDE,請c_c_lai版大解惑,謝謝。
作者: c_c_lai    時間: 2012-6-27 11:07

回復  c_c_lai


    小弟的寶來點精靈的檔案如附,小弟每次都是選擇(1013)DDE的畫面,輸出至NEW.XLS後 ...
devidlin 發表於 2012-6-27 10:42

你附上的new.xls 並非寶來點精靈的DDE檔案,我要幫你解惑的是從寶來點精靈(1013)DDE匯出的 xls 檔。
作者: devidlin    時間: 2012-6-27 11:29

回復 23# c_c_lai


    小弟附上的new.xls確實是我看盤的寶來點精靈的檔案,只不過小弟每天開盤前都是手動去選擇(1013)DDE的畫面,輸出至new.xls 後才連結DDE,我不知寶來點精靈的每個欄位程式碼為何,所以不會寫,才會想請教大哥您,謝謝。
作者: c_c_lai    時間: 2012-6-27 12:15

回復  c_c_lai


    小弟附上的new.xls確實是我看盤的寶來點精靈的檔案,只不過小弟每天開盤前都是手動 ...
devidlin 發表於 2012-6-27 11:29

你就把選擇(1013)DDE的畫面,輸出至NEW.XLS後的 xls 原始檔傳給我。
作者: devidlin    時間: 2012-6-27 12:32

回復 25# c_c_lai


  請教您的e-mail?謝謝。
作者: c_c_lai    時間: 2012-6-27 13:14

本帖最後由 c_c_lai 於 2012-6-27 16:24 編輯

回復 26# devidlin
[email][/email]
作者: devidlin    時間: 2012-6-27 13:19

回復 27# c_c_lai

寄給您了...
作者: c_c_lai    時間: 2012-6-27 17:31

回復 28# devidlin
我要的是如附圖標示的資料檔。
[attach]11507[/attach]
[attach]11508[/attach]
作者: devidlin    時間: 2012-6-27 18:00

回復 29# c_c_lai


    小弟明瞭您的意思,原來寶來環球通不像easywin的dde有程式碼代號,所以寶來環球通是偽的dde。
作者: c_c_lai    時間: 2012-6-27 20:52

回復  c_c_lai


    小弟明瞭您的意思,原來寶來環球通不像easywin的dde有程式碼代號,所以寶來環球通 ...
devidlin 發表於 2012-6-27 18:00

蠻好奇它是怎麼連結的, Anyway 我依據你現有的資料 (new.xls) 將 VBA 程式撰寫完畢,(請留意每個模組間的互動關係)
方便今後你能即時測試,為明瞭各個工作表單所具特性並同時將它們 Rename成 "DDE連結"、及 "策略紀錄"。
你每日 08:45 前連線後,它會等到了 08:45 便自動執行資料匯入,之後每隔一分鐘便執行一次;
直到 13:45 一過便自動停止,一切自動化。 接下來,就要靠你自個兒鑽研了。
祝 晚安!
[attach]11514[/attach]
作者: devidlin    時間: 2012-6-27 22:43

回復 31# c_c_lai


    感謝版大的協助,有空明天我再來測試,謝謝您。
作者: c_c_lai    時間: 2012-6-28 06:01

回復 32# devidlin
有答案時再告訴我。
說真格的,我對於你說的寶來點精靈之連結方式感到蠻好奇的。
作者: GBKEE    時間: 2012-6-28 08:48

回復 31# c_c_lai
這樣也會自動化
DDE連結工作表模組程式碼
  1. 'DDE連結 工作表的預設事件 :  當公式資料有變動時會觸發此事件
  2. Dim TheTime As Date  '記錄下一分鐘的時間 : DDE連結工作表模組的私用變數
  3. Private Sub Worksheet_Calculate()
  4.      Application.EnableEvents = False
  5.     If IsError([C2]) Or Time < #8:45:00 AM# Then
  6.         Sheets("策略記錄").[a1].CurrentRegion.Offset(1).Clear
  7.         Application.EnableEvents = True
  8.         Exit Sub
  9.     ElseIf Time > #1:30:00 PM# Then
  10.        Application.EnableEvents = True
  11.         Exit Sub
  12.     End If   
  13.     If CDbl(TheTime) = 0 Or TheTime <= Time Then    ' TheTime變數未給值  or   記錄下一分鐘的時間>= Time
  14.         With Sheets("策略記錄")
  15.             .Cells(.Rows.Count, 1).End(xlUp).Offset(1).EntireRow = Rows(2).Value
  16.         End With
  17.         TheTime = TimeSerial(Hour(Time), Minute(Time), 0) + #12:01:00 AM#
  18.     End If
  19.     Application.EnableEvents = True
  20. End Sub
複製代碼

作者: c_c_lai    時間: 2012-6-28 09:25

回復 34# GBKEE
謝謝您!
請教 TheTime = TimeSerial(Hour(Time), Minute(Time), 0) + #12:01:00 AM# 的用意何在?
為何偏偏加上 12:01:00,是指向下一分鐘嗎? 如果是的話,為何不是 00:01:00 ?
作者: GBKEE    時間: 2012-6-28 11:02

回復 35# c_c_lai
  1. '#   #  為系統輸入日期時間的關鍵字
  2. '#00:00#  系統自動生成 -> #12:00:00 AM#
  3. '#11:59#  系統自動生成 -> #11:59:00 AM#
  4. '#13:01#  系統自動生成 -> #1:01:00 PM#
  5. '#23:01#  系統自動生成 -> #11:01:00 PM#
  6. Option Explicit
  7. Sub Ex()
  8.     Dim TheTime As Date, xTime As Date
  9.     MsgBox "#11:59:59 AM# + #12:00:01 AM#" & Chr(10) & CDate(#11:59:59 AM# + #12:00:01 AM#)
  10.     TheTime = #8:45:05 AM#
  11.     xTime = TimeSerial(Hour(TheTime), 0, 0)
  12.     MsgBox xTime
  13.     xTime = TimeSerial(Hour(TheTime), Minute(TheTime), 0)
  14.     MsgBox xTime
  15.     xTime = TimeSerial(Hour(TheTime), Minute(TheTime), 0) + #12:01:00 AM#
  16.     MsgBox xTime
  17. End Sub
複製代碼

作者: c_c_lai    時間: 2012-6-28 11:26

回復 36# GBKEE
多謝指點!
很棒的範例,易懂但會腦筋打死結的!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)