返回列表 上一主題 發帖

DDE 擷取分鐘最高最低

版大您好 跟您報告一下 我已將程式上傳依照版大您的指導改了儲存格的時間隔式  測式的結果為時間隔式的部分皆顯示成0:00:00  只要價格跳動 CDE欄就會一直持續往下紀錄  檔案附上的內容裡 都是同一分鐘所顯示出來的   想請教版大這個部分該怎麼辦...麻煩您了~~

test1.rar (8.32 KB)

TOP

回復 11# vzcen
回復 9# GBKEE

TOP

本帖最後由 GBKEE 於 2013-6-24 16:23 編輯

回復 11# vzcen
B5的格式就不必修改了
B5的內容會顯示成102903, 此為6位數,請問 B5, 10點以前會顯示成95959, 此為5位數
  1. Option Explicit
  2. Private Sub Worksheet_Calculate()
  3.     Dim Rng As Range
  4.     Static Msg As Boolean    '以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
  5.    ' If Time < #10:28:00 AM# Or Time > #1:30:00 PM# Then Exit Sub   '非營業日 或 非營業時間
  6.     If Msg = False Then
  7.         清除舊資料
  8.         Msg = True
  9.     End If
  10.     With Cells(Rows.Count, "C").End(xlUp)
  11.         If .Row = 7 Then
  12.             Set Rng = .Offset(1)
  13.         Else
  14.             Set Rng = .Cells
  15.         End If
  16.     End With
  17.     'If Rng = "" Or Rng.Text <> Mid([B5].Text, 1, IIf(Len([B5]) = 6, 4, 3)) Then '如果[B5]10點以前的的數值是95959, 5位數 用此程式碼
  18.     If Rng = "" Or Rng.Text <> Mid([B5].Text, 1, 4) Then
  19.         If Rng <> "" Then Set Rng = Rng.Offset(1)
  20.         With Rng
  21.             .NumberFormatLocal = "@"
  22.              '.Cells = Mid([B5].Text, 1, IIf(Len([B5]) = 6, 4, 3))                 '如果[B5]10點以前的的數值是95959. 5位數 用此程式碼
  23.           .Cells = Mid([B5].Text, 1, 4)
  24.             .Cells(1, 2) = [B6].Text
  25.             .Cells(1, 3) = [B6].Text
  26.         End With
  27.    'ElseIf Rng.Text = Mid([B5].Text, 1, IIf(Len([B5]) = 6, 4, 3)) Then                '如果[B5]10點以前的的數值是95959. 5位數 用此程式碼
  28.     ElseIf Rng.Text = Mid([B5].Text, 1, 4) Then
  29.         If [B6] > Rng(1, 2) Then Rng(1, 2) = [B6].Text
  30.         If [B6] < Rng(1, 3) Then Rng(1, 3) = [B6].Text
  31.     End If
  32. End Sub
複製代碼
  1. Private Sub 清除舊資料()
  2.     On Error GoTo Er
  3.     If [營業日] <> Date Then            '檢查 定義名稱:"營業日"的值
  4.         Me.Names.Add "營業日", Date     '定義名稱:"營業日"的值為當日
  5.         If Weekday(Date, vbMonday) <= 5 Then Range([C8], [E8].End(xlDown)).Clear ' 修改 3#   
  6.     End If
  7.     Exit Sub
  8. Er:  '處裡: 沒有定義名稱:"營業日"的錯誤
  9.      Me.Names.Add "營業日", Date        '定義名稱:"營業日"的值為當日
  10.      Resume Next                        '回到錯誤的下一個程式碼:繼續執行
  11. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

感謝C_C_lai版大的回覆 經過測試後時間可以正常的往下累積每分鐘的最大值最小值 真是太感激您了 ...但有個問題還想請教一下版大們 ...由於每家的系統報價格式不同 有的甚至沒有提供時間的DDE連結....所以我想請問有辦法做的到利用程式去跑出時間嗎??  因為若遇到沒有提供時間DDE的連結的系統那麼程式就不能順利執行了  懇請板大們幫忙解答 感謝您們了..........
另外....我知道我這樣問好像很蠢  但..我想....學習了解程式的過程中 我也該學著有關禮貌的回覆方式 因為我常看到板大們的回覆有 11# 6# 針對該文所提出的內容做回覆...所以想問問版大們 我若要回覆時 要按哪一個鈕才是針對該文的回答.....我想這樣回覆好像會更有禮貌  同時也是對辛苦版大們所做的回答內容更尊重......呵呵

TOP

各位版大們好 我下午時開著電腦讓它跑了一下....發現一個奇怪的問題.....就是報價軟體的時間與價格是有跳動的    但是DDE的時間好像有時會停住...測試結果 我附上檔案  檔案裡 時間無法連續的顯示每一分鐘....好比17:44 接下來就掉到17:46   又或者是18:14 接著跳到18:17 ......請問強者版大們這個情況是哪邊出現問題嗎??

Book1.rar (10.06 KB)

TOP

本帖最後由 c_c_lai 於 2013-6-25 05:34 編輯

回復 15# vzcen
基本上,時間是會以每分鐘持續地記錄的,因為程式啟動後 Calculate 會不停地掃描。
此時,如果電腦另開啟了別的應用軟體 (耗用資源大)在運作而占據了 CPU ,那麼是會
有所影響的,或者是又同時開啟瞭一個以上的 Excel 檔等,亦會有所影響。
個人是常碰到類似相關問題 (券商DDE連線品質、電腦運作環境等)  , 純供參考。

P.S: 答覆對方時請點選 "回復" 選鈕,否則當事人會不知你有否回復,點按 "回復" 亦是一種禮貌。

TOP

回復 13# GBKEE


    請問版主
With Cells(Rows.Count, "C").End(xlUp)
        If .Row = 7 Then
            Set Rng = .Offset(1)  請問這裡的用法還原:  Cells(Rows.Count, "C").End(xlUp).Offset(1)   這個意思嗎??
        Else
            Set Rng = .Cells       請問這裡的用法還原:  Cells(Rows.Count, "C").End(xlUp).Cells   這個意思嗎?? 這會不斷的增加Range 的大小是嗎?
        End If
    End With

謝謝您的指導^^

TOP

回復 17# handsometrowa
沒錯
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 13# GBKEE
回復 16# c_c_lai

感謝強者版大們不吝的指導 原來DDE是這樣時間才無法接續
那想請教版大們 若測識DDE的時間 為周一至周六     9:00PM-隔日的2:00AM
我是不是要將程式05行改成   If Weekday(Date, vbMonday) > 6 Or Time < #9:00:00 PM# Or Time > #2:00:00 AM# Then Exit Sub     '非營業日 或 非營業時間
然後31行的改成 If Weekday(Date, vbMonday) <= 6 Then Range([C8], [E8].End(xlDown)).Clear '營業日
由5改成6是指禮拜一至六的意思嗎?   那時間的部分這樣改是對的嗎?
麻煩各位大大們解惑了  謝謝您們~

TOP

本帖最後由 c_c_lai 於 2013-6-27 06:55 編輯
回復  GBKEE
回復  c_c_lai

感謝強者版大們不吝的指導 原來DDE是這樣時間才無法接續
那想請教版大們 ...
vzcen 發表於 2013-6-26 00:34

1. 試試看便知曉! (因你是跨日的, 所以條件須為 (條件1 And 條件2))
  1. Sub Test()
  2.     If Weekday(Date, vbMonday) > 6 Or (#9:00:00 PM# < #9:00:00 PM# And #9:00:00 PM# > #2:00:00 AM#) Then Exit Sub
  3.     '  If Weekday(Date, vbMonday) > 6 Or (#8:00:00 PM# < #9:00:00 PM# And #8:00:00 PM# > #2:00:00 AM#) Then Exit Sub
  4.    '  If Weekday(Date, vbMonday) > 6 Or (#12:00:00 AM# < #9:00:00 PM# And #12:00:00 AM# > #2:00:00 AM#) Then Exit Sub
  5.     '   If Weekday(Date, vbMonday) > 6 Or (#12:10:00 AM# < #9:00:00 PM# And #12:10:00 AM# > #2:00:00 AM#) Then Exit Sub
  6.    MsgBox "It's OK!"
  7. End Sub
複製代碼
2. 31行 的修改是 OK 可行的!

TOP

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題