Board logo

標題: 請問高手要將以下DDE 每分鐘記錄改為30秒自動記錄一次要怎改 [打印本頁]

作者: xu123    時間: 2012-5-25 13:19     標題: 請問高手要將以下DDE 每分鐘記錄改為30秒自動記錄一次要怎改

我對VBA都不懂在網上找好久找到一個比較接近我要的範例
可是他是每分鐘記錄一次
可以請高手幫我改每30秒就記錄一次嗎
也謝謝這位提供範例的網友


Option Explicit
Dim LastMin As Integer

Private Sub Workbook_Open()
    Sheets("策略記錄").Cells(4, 2) = 10
    LastMin = Minute(Time)
    Call Timer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
End Sub


Public Sub Timer()
    Dim Pos As Integer, i As Integer, RangeStr As String
        
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer" '每秒顯示
    Sheets("策略記錄").Cells(3, 2) = Time '將時間show至策略的b3欄位
    Dim HHMM As Integer
    HHMM = Hour(Time) * 100 + Minute(Time)
    If (HHMM < 845 Or HHMM > 1345) Then Exit Sub '營業時間才執行
    If Minute(Time) <> LastMin Then '開始後做
        With Sheets("策略記錄")
            .Cells(4, 2) = .Cells(4, 2) + 1 '將變動行號加一行
            Pos = .Cells(4, 2)
            .Cells(Pos, 1) = Time
            .Cells(Pos, 2) = .Cells(2, 2)
            .Cells(Pos, 3) = .Cells(2, 3)
            .Cells(Pos, 4) = .Cells(2, 4)
            .Cells(Pos, 5) = .Cells(2, 5)
            .Cells(Pos, 6) = .Cells(2, 6)
            .Cells(Pos, 7) = .Cells(2, 7)
            .Cells(Pos, 8) = .Cells(2, 8)
            .Cells(Pos, 9) = .Cells(2, 9)
            .Cells(Pos, 10) = .Cells(2, 10)
           
         
        End With
   
        LastMin = Minute(Time)
    End If
End Sub
作者: c_c_lai    時間: 2012-5-25 14:32

回復 1# xu123
就以你手上案例來討論的話,你只要將 "00:00:01" (每一秒)
修改為 "00:00:30"  (每三十秒) 便完成了!
作者: xu123    時間: 2012-5-25 14:55

謝謝c_c_lai 大的回復
下周開盤再試試看
作者: c_c_lai    時間: 2012-5-25 21:14

回復 3# xu123
不須等開盤,你只要開啟該Excel 表單,於 8:45 後觀察每隔30秒是否會寫入一筆紀錄,
答案便即知曉。
作者: mead    時間: 2012-5-25 22:16

回復  xu123
不須等開盤,你只要開啟該Excel 表單,於 8:45 後觀察每隔30秒是否會寫入一筆紀錄,
答案便 ...
c_c_lai 發表於 2012-5-25 21:14

請問要改哪兒?
Application.OnTime Now + TimeValue("00:00:30"), "ThisWorkbook.Timer" '每秒顯示
我改這邊後  時間就不動也不記錄了?

謝謝  感恩
作者: xu123    時間: 2012-5-26 02:49

c_c_lai 大
試過了不行ㄋ
``我改開盤時間去測試
還是一分鐘記一次
作者: c_c_lai    時間: 2012-5-26 06:49

回復 6# xu123
請附上檔案由我這方來觀察,因為那本來就可行的,
否則你的 "00:00:01" 亦無法執行。
作者: c_c_lai    時間: 2012-5-26 09:44

回復 6# xu123
附上圖片以及程式碼供你實務參考:
一、 DDE 每分鐘記錄改為30秒自動記錄一次要怎改 [修改]
[attach]11149[/attach]
  1. Option Explicit
  2. Dim counter As Single      ' 為加深印象,用它來顯示程式有否在運行處理

  3. Private Sub Workbook_Open()
  4.     counter = 0

  5.     Call timerStart        ' 當開啟本 Excel 檔案,程式則自動執行 timerStart 程式段。
  6. End Sub

  7. Sub timerStart()
  8.     ' 本範例設定時間是從每日八點四十五分開始起算,每隔 30 秒便會自動去執行 ThisWorkbook 程式區域內的 ExeSelf。
  9.     ' 如果覺得等太久了,也可以去異動時段。例如: "00:00:01"(每隔 1 秒)、"00:00:10"(每隔 10 秒)、"00:00:20"(每隔 20 秒) 等等。
  10.     If (TimeValue(Now) > TimeValue("08:45:00")) Then Application.OnTime (Now + TimeValue("00:00:30")), "ThisWorkbook.ExeSelf"
  11. End Sub

  12. Sub ExeSelf()
  13.     counter = counter + 1   ' counter 會逐次加一

  14.     [F8].Value = counter    ' 08:45 後每隔 30 秒,請觀察 F1 欄位數字是否會異動?
  15.     Call timerStart         ' 程式之所以會反覆執行,就在於本行自動再去回頭呼叫執行 timerStart 程式段一次之故。
  16. End Sub
複製代碼
二、 多空力道 (O/H/L/C) 實際之程式運作程式碼,請細心端倪。
  1. Option Explicit

  2. Dim timerEnabled As Boolean  '
  3. Dim counter As Single        ' 示範用計數器
  4. Dim Ov As Single, Hv As Single, Lv As Single, Cv As Single As Single  ' 開盤價、最高價、最高價、收盤價(成交價) 等設定之變數。
  5. Dim turnKey As Integer   ' 判斷每一輪迴上列變數初始值之設定。
  6. Dim nums As Integer      ' 將每隔 "多少時間" 處理時段,移到此處來處理。

  7. Private Sub Workbook_Open()
  8.     counter = 0

  9.     nums = 30            ' 設定每隔 30 秒處理時段,亦可更改成 10 (每隔 10 秒)、20 (每隔 20 秒)等等。
  10.                          ' 此處不建議使用 1 秒時段來處理,因為還要去求出開盤、最高、最低、成交價。
  11.     timerEnabled = False
  12.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart      
  13. End Sub

  14. Sub timerStart()
  15.     turnKey = 0          ' 每一輪迴盤中初始值之設定。

  16.     If timerEnabled Then
  17.         Application.OnTime (Now), "ThisWorkbook.ExeSelf"
  18.     Else
  19.         ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  20.         Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.ExeSelf"
  21.     End If
  22. End Sub

  23. Sub ExeSelf()
  24.     timerEnabled = True

  25.     If IsError(Sheets("工作表1").Range("E5").Value) Then ' 假設 E5 欄位為多空力道
  26.         Cv = 0
  27.     Else
  28.         Cv = Sheets("工作表1").Range("E5").Value          ' 多空力道成交價
  29.     End If
  30.    
  31.     If (turnKey = 0 Or Ov = 0) Then                     ' 當 turnKey 值為0,表示其為初始值設定。為考量系統剛連上 DDE,
  32.                                                         ' 有時在第一根數值產生時 Ov = Cv 值可能為 0 (IsError()的狀態)。
  33.         Ov = Cv                                         ' 多空力道開盤價初始值設定
  34.         Hv = Cv                                         ' 多空力道最高價初始值設定
  35.         Lv = Cv                                         ' 多空力道最低價初始值設定
  36.     End If
  37.    
  38.     turnKey = turnKey + 1
  39.    
  40.     If (Cv > Hv) Then Hv = Cv                           ' 判斷多空力道最高價
  41.     If (Cv < Lv) Then Lv = Cv                           ' 判斷多空力道最低價

  42.     counter = counter + 1
  43.     [F1].Value = counter    ' 08:45 後每隔 30 秒,請觀察 F1 欄位數字是否會異動?
  44.    
  45.     If (turnKey < nums) Then
  46.         Application.OnTime (Now + TimeValue("00:00:01")), "ThisWorkbook.ExeSelf"
  47.     Else
  48.         If (Cv > 0) Then Call Timer
  49.         Call timerStart
  50.     End If
  51. End Sub

  52. Sub Timer()
  53.     Dim str As String
  54.    
  55.     If (TimeValue(Now) >= TimeValue("08:45:00") And TimeValue(Now) <= TimeValue("13:46:01")) Then    ' 開盤、收盤時段設定
  56.         ' 盤中處理,將資料匯入寫入工作表單內儲存。

  57.     End If
  58. End Sub
複製代碼
請留意此兩支程式的寫法上之差異,我都盡量一一加以說明為何如此,相信對你會有助益。
我們在人生旅程上都是從不知而獲知中成長的,只要有心都可以成功的。
作者: xu123    時間: 2012-5-26 10:20

謝謝c_c_lai 大用心的回復我附上檔案了[attach]11150[/attach][attach]11150[/attach]
作者: mead    時間: 2012-5-26 10:44

回復  xu123
附上圖片以及程式碼供你實務參考:
一、 DDE 每分鐘記錄改為30秒自動記錄一次要怎改 [修改] ...
c_c_lai 發表於 2012-5-26 09:44

感謝c_c_lai 大這麼詳細用心的解說
又進一步學習了
來測試研究一下

感恩再感恩
作者: a8350070    時間: 2012-5-26 11:03

本帖最後由 a8350070 於 2012-5-26 11:04 編輯

試著在變動幅度最小的前提下修改

Option Explicit
Dim LastMin As Long

Private Sub Workbook_Open()
    Sheets("策略記錄").Cells(4, 2) = 10
    LastMin = Hour(Time) * 3600 + Minute(Time) * 60 + Second(Time)
   Call Timer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
End Sub


Public Sub Timer()
    Dim Pos As Integer, i As Integer, RangeStr As String
        
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer" '每秒顯示
    Sheets("策略記錄").Cells(3, 2) = Time '將時間show至策略的b3欄位
    Dim HHMM As Integer
    HHMM = Hour(Time) * 100 + Minute(Time)
    If (HHMM < 845 Or HHMM > 1345) Then Exit Sub '營業時間才執行
    If Hour(Time) * 3600 + Minute(Time) * 60 + Second(Time) > LastMin + 30 Then '開始後做
        With Sheets("策略記錄")
            .Cells(4, 2) = .Cells(4, 2) + 1 '將變動行號加一行
            Pos = .Cells(4, 2)
            .Cells(Pos, 1) = Time
            .Cells(Pos, 2) = .Cells(2, 2)
            .Cells(Pos, 3) = .Cells(2, 3)
            .Cells(Pos, 4) = .Cells(2, 4)
            .Cells(Pos, 5) = .Cells(2, 5)
            .Cells(Pos, 6) = .Cells(2, 6)
            .Cells(Pos, 7) = .Cells(2, 7)
            .Cells(Pos, 8) = .Cells(2, 8)
            .Cells(Pos, 9) = .Cells(2, 9)
            .Cells(Pos, 10) = .Cells(2, 10)
           
         
        End With
   
        LastMin = Hour(Time) * 3600 + Minute(Time) * 60 + Second(Time)
    End If
End Sub
作者: c_c_lai    時間: 2012-5-26 11:38

回復 9# xu123
[attach]11151[/attach]
  1. Option Explicit
  2. Dim LastMin As String          ' 更改為間隔時段設定

  3. Private Sub Workbook_Open()
  4.     Sheets("策略記錄").Cells(4, 2) = 10     ' 保留你之前的設定,每次一開啟Excel都重新開始
  5.     LastMin = "00:00:30"          ' 每隔 30 秒的時段設定。如需以一分鐘做處哩,則請修正為 "00:01:00"
  6.    
  7.     Call Timer
  8. End Sub

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


  13. Public Sub Timer()
  14.     Dim Pos, i, HHMM As Integer, RangeStr As String
  15.         
  16.     On Error Resume Next
  17.     Sheets("策略記錄").Cells(3, 2) = Time '將時間show至策略的b3欄位
  18.    
  19.     HHMM = Hour(Time) * 100 + Minute(Time)
  20.     If (HHMM < 845 Or HHMM > 1345) Then Exit Sub '營業時間才執行
  21.         
  22.     With Sheets("策略記錄")
  23.         .Cells(4, 2) = .Cells(4, 2) + 1 '將變動行號加一行
  24.         Pos = .Cells(4, 2)
  25.         .Cells(Pos, 1) = Time
  26.         .Cells(Pos, 2) = .Cells(2, 2)
  27.         .Cells(Pos, 3) = .Cells(2, 3)
  28.         .Cells(Pos, 4) = .Cells(2, 4)
  29.         .Cells(Pos, 5) = .Cells(2, 5)
  30.         .Cells(Pos, 6) = .Cells(2, 6)
  31.         .Cells(Pos, 7) = .Cells(2, 7)
  32.         .Cells(Pos, 8) = .Cells(2, 8)
  33.         .Cells(Pos, 9) = .Cells(2, 9)
  34.         .Cells(Pos, 10) = .Cells(2, 10)
  35.     End With
  36.    
  37.     Application.OnTime Now + TimeValue(LastMin), "ThisWorkbook.Timer"  ' 每 LastMin 執行一次
  38. End Sub
複製代碼
祝星期假日愉快!
[attach]11152[/attach]
作者: xu123    時間: 2012-5-26 12:11

測試可以使用了
謝謝a8350070  和c_c_lai
你們真的很熱心
作者: GaryC    時間: 2012-5-27 15:59

初來到這裡 真是高手如雲
看來可得好好學習了
作者: usana642    時間: 2012-6-20 19:59

感謝c_c_lai 大這麼詳細用心的解說
作者: usana642    時間: 2012-6-20 21:42

謝謝a8350070  和c_c_lai 用心的解說
作者: mead    時間: 2012-6-24 10:32

本帖最後由 mead 於 2012-6-24 10:34 編輯
試著在變動幅度最小的前提下修改

Option Explicit
Dim LastMin As Long

Private Sub Workbook_Open ...
a8350070 發表於 2012-5-26 11:03

If Hour(Time) * 3600 + Minute(Time) * 60 + Second(Time) > LastMin + 30 Then '開始後做
這樣改  其要記錄的時間設定要減1
如30秒  就要加29而非30
作者: c_c_lai    時間: 2012-6-25 07:55

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

回復 17# mead
附上一個可以隨你需求異動的 "自動記錄每分鐘委買賣均值",
以後你就沒有煩惱的事了!
[attach]11481[/attach]

P.S. 請將 Time() 裡的             .Cells(21, 2).Offset(0).Resize(, 9) = .[B12:J12].Value
更改成                                      .Cells(Pos, 2).Offset(0).Resize(, 9) = .[B2:J2].Value
作者: c_c_lai    時間: 2012-6-25 08:49

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

回復 19# mead
找到了,已  E-Mail 過去了!
作者: usana642    時間: 2012-6-25 19:03

回復 20# c_c_lai


    c_c_lai 大大,我也需要這個檔案,因權限不足無法下載
可否寄到我的信箱,感謝熱心分享
作者: c_c_lai    時間: 2012-6-26 06:58

回復 21# usana642
1. 請將下列程式碼複製到 ThisWorkbook 模組內,並予儲存。
  1. Option Explicit
  2. Dim timerEnabled As Boolean    ' 判定開啟本工作表單的時段是否為開盤前啟動。
  3. Dim Pos As Integer             ' 將每隔 "多少時間" 處理時段,移到此處來處理。

  4. Private Sub Workbook_Open()
  5.     Pos = Sheets("策略記錄").Range("B" & Rows.Count).End(xlUp).Row
  6.     If (Pos < 11) Then Pos = 10
  7.     Sheets("策略記錄").Cells(4, 2) = Pos

  8.     If (Sheets("策略記錄").Range("B6").Value = "") Then Sheets("策略記錄").Range("B6").Value = "08:45:00"
  9.     If (Sheets("策略記錄").Range("B7").Value = "") Then Sheets("策略記錄").Range("B7").Value = "13:45:00"
  10.     If (Sheets("策略記錄").Range("B8").Value = "") Then Sheets("策略記錄").Range("B8").Value = "00:00:30"
  11.    
  12.     timerEnabled = False

  13.     Call timerStart      ' 程式一啟始,便去自動執行 timerStart
  14. End Sub

  15. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  16.     On Error Resume Next
  17.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Timer", , False
  18.    
  19.     Me.Save
  20. End Sub

  21. Public Sub Timer()
  22.     On Error Resume Next
  23.     If (TimeValue(Now) > Sheets("策略記錄").Range("B7").Value) Then Exit Sub
  24.    
  25.     If (TimeValue(Now) >= Sheets("策略記錄").Range("B6").Value) Then         ' 開盤、收盤時段設定
  26.         ' 盤中處理,將資料匯入寫入工作表單內儲存。

  27.         With Sheets("策略記錄")
  28.             .Cells(3, 2) = Time             ' 將時間 Show 至策略的 B3 欄位

  29.             Pos = Pos + 1                   ' 將變動行號加一行
  30.             .Cells(4, 2) = Pos

  31.             .Cells(Pos, 1) = Time
  32.             .Cells(Pos, 2).Offset(0).Resize(, 9) = .[B2:J2].Value
  33.         End With
  34.     End If
  35.         
  36.     Call timerStart
  37. End Sub

  38. Sub timerStart()
  39.     If timerEnabled Then
  40.         ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。
  41.         Application.OnTime (Now + Sheets("策略記錄").Range("B8").Value), "ThisWorkbook.Timer"
  42.     Else
  43.         timerEnabled = True
  44.         
  45.         ' 將第一次啟動時間更改為設定 "開盤時間"前,如果開啟 Excel 時,已經過了設定 "開盤時間",則一進入系統即直接去執行紀錄作業。
  46.         If (TimeValue(Now) <= Sheets("策略記錄").Range("B6").Value) Then
  47.             Application.OnTime (Sheets("策略記錄").Range("B6").Value), "ThisWorkbook.Timer"
  48.         Else
  49.             ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  50.             ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  51.             Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.Timer"
  52.         End If
  53.     End If
  54. End Sub
複製代碼
2. 工作表單內容如圖,請參考它與程式碼間的關係及運作。
[attach]11490[/attach]
3. 以上完成後,先將本專案儲存並離開。
4. 接下來先打開券商軟體
    (譬如:你製作的工作表單是跟哪一家券商連線的,如 EasyWin、eLeader、或其他券商連線軟體),
    然後啟動你製作的 "自動記錄每分鐘委買賣均值"  Excel,並同時連上券商連線軟體,就大功告成了!

希望它能助益於你,並能幫助你更上一層樓。
作者: usana642    時間: 2012-6-26 20:02

回復 23# c_c_lai


    收到,謝謝您熱心的分享,祝您財源滾滾...
作者: steveyeh168    時間: 2012-9-19 02:20

請教c_c_lai,可以傳給我此檔嗎? thanks  a lot!
作者: c_c_lai    時間: 2012-9-19 08:16

回復 25# steveyeh168
沒 E-Mail Address 如何寄給你?
作者: steveyeh168    時間: 2012-9-23 02:35

本帖最後由 GBKEE 於 2013-9-8 20:23 編輯

謝謝C_C_lai......
**************
再次感謝~*_*
這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: c_c_lai    時間: 2012-9-23 05:59

謝謝C_C_lai......

再次感謝~*_*
steveyeh168 發表於 2012-9-23 02:35

[attach]12594[/attach]
作者: steveyeh168    時間: 2012-9-25 01:39

我是小學生,收不到,可以麻煩寄到email 信箱嗎?
再次感謝......
作者: c_c_lai    時間: 2012-9-25 05:16

我是小學生,收不到,可以麻煩寄到email 信箱嗎?
再次感謝......
steveyeh168 發表於 2012-9-25 01:39

已寄到你 email 信箱數日了,難道沒收信嗎?
作者: steveyeh168    時間: 2012-9-26 16:55

Dear C_C lai:我每天都有收信,而且我怕yahoo會歸為垃圾信,還到垃圾信件區去看
                       都沒有,可以麻煩再寄一次嗎? 甘恩~
作者: c_c_lai    時間: 2012-9-26 19:25

Dear C_C lai:我每天都有收信,而且我怕yahoo會歸為垃圾信,還到垃圾信件區去看
                       都沒 ...
steveyeh168 發表於 2012-9-26 16:55

自動記錄每分鐘委買賣均值.rar (上次 E-Mail 時間:2012/9/23 (週日) 6:05 AM)
你回覆時沒點按 "回復鍵" 我是收不到的,
幸虧我無意看到了你的發文。
再收收看!
作者: steveyeh168    時間: 2012-9-27 20:58

回復 31# steveyeh168

早上開盤試了一下,竟然沒有跑......
我是用easywin,還有那個時間欄怎都沒有跑出時間呢?[attach]12617[/attach]
作者: steveyeh168    時間: 2012-9-27 20:59

說錯了,是只跑出時間,其他都沒跑出來........
感謝幫忙
作者: c_c_lai    時間: 2012-9-28 10:07

說錯了,是只跑出時間,其他都沒跑出來........
感謝幫忙
steveyeh168 發表於 2012-9-27 20:59

你匯入的券商 DDE 有否跟著修正?
請你下次先點選 "回復", 再行回復,如不是無意間瀏覽到是無從作答的,這也是回復當事人的一種禮貌!
作者: f3202    時間: 2012-9-28 11:39

回復 34# steveyeh168

          .Cells(21, 2).Offset(0).Resize(, 9) = .[B12:J12].Value
改   
           .Cells(Pos, 2).Offset(0).Resize(, 9) = .[B10:J10].Value
作者: steveyeh168    時間: 2012-9-29 08:57

回覆 C_C lai:
連券商的有改過,否則跑出來會出現N/A,請問可以幫忙解決嗎?
作者: c_c_lai    時間: 2012-9-29 09:17

回復 37# steveyeh168
請先看圖片。
.[attach]12625[/attach]
.
.
.
然後去收 Mail.
作者: steveyeh168    時間: 2012-9-29 09:47

回復 36# f3202
thanks  a lot!
作者: steveyeh168    時間: 2012-9-29 09:50

回復 38# c_c_lai
被C_C lai 發現了,我用打的回覆~
還沒連easywin自己會跑,我現在改連到easywin的DDE(改券商參數)試試看......
感謝幫忙~
作者: steveyeh168    時間: 2012-9-29 10:16

C_C lai 好強
請教有辦法讓數值由下往上跑嗎?不然都要拉捲軸,再次謝謝幫忙!
作者: parapa    時間: 2012-10-8 18:08

本帖最後由 GBKEE 於 2013-9-8 20:21 編輯

C_C lai 大大:

因權限不足,可以把檔案寄至下列信箱嗎?
**********
這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: c_c_lai    時間: 2012-10-10 07:20

回復 42# parapa
你沒按 "回復" 鈕,我是無從得知訊息的。
剛才想瞧瞧該文章的內容,才獲悉你已發文。
請檢查你的郵箱,已經 E-Mail 給你了。
作者: devidlin    時間: 2012-10-13 10:10

回復 43# c_c_lai


    想請問c大,附上幣圖誌小工具用康和做的,可以改成用元大easy win來做嗎?謝謝。
作者: c_c_lai    時間: 2012-10-14 08:03

回復 44# devidlin
看起來這好像是直接連結網站,而透過網頁處理的。
這可能是無法異動的。
作者: devidlin    時間: 2012-10-14 16:23

回復 45# c_c_lai


   c大你好,小弟有寄檔案到您的信箱,看是否能更改成元大easy win用,謝謝。
作者: c_c_lai    時間: 2012-10-14 17:31

回復 46# devidlin
經檢查,沒收到你的信。
作者: devidlin    時間: 2012-10-14 18:43

回復 47# c_c_lai


    小弟把檔案放上來了,謝謝。
作者: c_c_lai    時間: 2012-10-15 07:04

回復 48# devidlin
一執行 "toolbituzi(康和版-須連結康和全都賺下單軟體方可使用).exe"
便出現 "此 DDE 起始動作沒有得到其他應用程式的回應" 的訊息。
它一安裝即要求與券商連結,這極有可能程式寫死的,如果是則無法異動。
作者: devidlin    時間: 2012-10-15 09:40

回復 49# c_c_lai


    c大你好,有關於台指價差,摩台價差,摩減台漲跌幅,振幅等四項,可以用元大easywin的dde,另外寫出來嗎?
作者: c_c_lai    時間: 2012-10-15 10:46

回復 50# devidlin
只要你有正確的運算公式,且其中有關基本來源數據欄位均能來自 DDE 的話,
是當然可行的。
作者: devidlin    時間: 2012-10-15 10:52

回復 51# c_c_lai


    C大你好,小弟不會寫,可以舉出一個範例程式給小弟參考嗎?謝謝。
作者: c_c_lai    時間: 2012-10-15 11:06

回復 52# devidlin
你把你目前 DDE 運作的 Excel 傳過來 (My E-Mail)
然後再告訴我 台指價差,摩台價差,摩減台漲跌幅,振幅等四項的運算公式。
作者: devidlin    時間: 2012-10-15 11:21

回復 50# devidlin


    請教C大的EMAIL?
作者: devidlin    時間: 2012-10-15 12:01

回復 55# devidlin


      小弟放檔案上來了,四個欄位:K2,L2,M2,N2,謝謝。
作者: c_c_lai    時間: 2012-10-15 14:03

回復 55# devidlin
交給你了。 (ThisWorkbook)
[attach]12774[/attach]
[attach]12775[/attach]
作者: devidlin    時間: 2012-10-15 14:24

回復 56# c_c_lai


    小弟是想說,此四個欄位:K2,L2,M2,N2,類似用時鐘方式或是一個方塊在右邊方式提醒注意,不知可否做到,謝謝。
作者: c_c_lai    時間: 2012-10-15 16:32

回復 57# devidlin
如你所言,可能就要透過 VB、或是其它語言工具 來完成了。
倘若只是土法煉鋼,那就是在 Excel 內另尋一區塊將此四個
運算放在一起,當作是一個標的來檢視。
作者: GBKEE    時間: 2012-10-15 17:19

回復 57# devidlin
類似用時鐘方式或是一個方塊在右邊方式提醒注意
如圖嗎?

[attach]12787[/attach]

程式碼複製後存檔,再開檔試看看

ThisWorkbook模組的程式碼
  1. Private Sub Workbook_Open()
  2.     UserForm1.Show
  3. End Sub
複製代碼

附檔上 插入一UserForm(表單)  系統自動命名 (UserForm1)
UserForm(表單)的程式碼
  1. Option Explicit
  2. Dim Msg As Boolean
  3. Private Sub UserForm_Initialize()   'UserForm(表單) 初始化時的事件程序
  4.     '請先在UserForm(表單) 加入4個 Label控制項
  5.     '系統自動命名(Label1, Label2 , Label3 , Label4)
  6.     '請自行調整 4個 Label控制項 的位置,長,寬,高
  7.     Dim i As Integer
  8.     For i = 1 To 4
  9.         With Me.Controls("Label" & i)
  10.             .TextAlign = 1 ' fmTextAlignCenter
  11.             .Font.Bold = True
  12.             .Font.Size = 15
  13.             .SpecialEffect = fmSpecialEffectEtched
  14.         End With
  15.     Next
  16. End Sub
  17. Private Sub UserForm_Activate()       'UserForm(表單) 顯示時的事件程序
  18.     Dim xlTile As String, S As String
  19.     S = Space(5)
  20.     Application.Visible = False
  21.     Do Until Msg = True
  22.         DoEvents
  23.         If Time < #8:00:00 AM# Then
  24.             xlTile = "尚未開盤"
  25.         ElseIf Time > #1:30:00 PM# Then
  26.             xlTile = "已收盤"
  27.         Else
  28.             xlTile = "營業中"
  29.         End If
  30.         If Not Msg Then Caption = Format(Now, "Dddddd ttttt ") & xlTile
  31.         If xlTile <> "尚未開盤" Then
  32.             Label1.Caption = S & [sheet1!K1] & S & [ROUND(sheet1!K2,3)]
  33.             Label2.Caption = S & [sheet1!L1] & S & [ROUND(sheet1!L2,3)]
  34.             Label3.Caption = S & [sheet1!M1] & S & [ROUND(sheet1!M2,3)]
  35.             Label4.Caption = S & [sheet1!N1] & S & [ROUND(sheet1!N2,3)]
  36.         End If
  37.     Loop
  38. End Sub
  39. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'UserForm(表單) 關閉時的事件程序
  40.     Msg = True
  41.     Application.Visible = True
  42. End Sub
複製代碼

作者: c_c_lai    時間: 2012-10-15 18:53

回復 59# GBKEE
  1.     If xlTile <> "尚未開盤" Then
  2.         Label1.Caption = S & [sheet1!K1] & S & [ROUND(sheet1!K2,3)]
  3.         Label2.Caption = S & [sheet1!L1] & S & [ROUND(sheet1!L2,3)]
  4.         Label3.Caption = S & [sheet1!M1] & S & [ROUND(sheet1!M2,3)]
  5.         Label4.Caption = S & [sheet1!N1] & S & [ROUND(sheet1!N2,3)]
  6.     End If
複製代碼
須更正為:
  1.     If xlTile <> "尚未開盤" Then
  2.         Label1.Caption = S & Sheet2.[K1] & S & Round(Sheet2.[K2], 3)
  3.         Label2.Caption = S & Sheet2.[L1] & S & Round(Sheet2.[L2], 3)
  4.         Label3.Caption = S & Sheet2.[M1] & S & Round(Sheet2.[M2], 3)
  5.        Label4.Caption = S & Sheet2.[N1] & S & Round(Sheet2.[N2], 3)
  6.     End If
複製代碼
否則會出現錯誤訊息。
作者: devidlin    時間: 2012-10-15 19:18

回復 60# c_c_lai


    謝謝G大及C大,我剛用原來的檔案試過,插入上述程式碼,好像不能用,可以將原檔案(元大-盤中DDE紀錄1015)

   插入後的最新檔案放上來嗎?謝謝。
作者: devidlin    時間: 2012-10-15 19:30

回復 61# devidlin


    已經可以了,盤中會隨時變化嗎?
作者: c_c_lai    時間: 2012-10-15 19:39

回復 61# devidlin
[attach]12788[/attach]
元大-盤中DDE紀錄1015一經啟動,便同時會開啟UserForm(表單),
一旦開啟UserForm(表單)後,所有畫面控制權便由表單掌控,此時是
無法切換工作表單的 (如想要閱覽非目前工作表單之內容)。
為解決此困惱,我增加了一個按鈕 "摩台價差",當你關閉(X)UserForm(表單)後,
你可以透過 "摩台價差"按鈕再次開啟它,此動作是不會引響 DDE 之正常匯入。
雖然會感覺有些不方便,但習慣就好了。
同時在此也要謝謝 GBKEE 版大的協助與指導!
[attach]12789[/attach]
作者: GBKEE    時間: 2012-10-15 20:32

回復 60# c_c_lai
否則會出現錯誤訊息 是資料不正確嗎?
請改用55#的檔案試試看, 或是  sheet1 改成 DEE 看看
  回復 63# c_c_lai
當你關閉(X)UserForm(表單)後,你可以透過 "摩台價差"按鈕再次開啟
有修正的必要  
如隨後再按鈕: 開啟的表單, 會停留在.  " 資料載入中 ............"     沒有執行 ThisWorkbook模組中 Sub showUsrForm()
作者: c_c_lai    時間: 2012-10-15 21:26

回復 64# GBKEE
我將
1.   Private Sub showUsrForm() 改成 Sub showUsrForm()
2.   下面兩個涵式各加入showUsrForm。
  1. Sub 摩台價差()
  2.     If UserForm1.Visible = False Then
  3.         UserForm1.Show
  4.         showUsrForm
  5.     Else
  6.         UserForm1.Hide
  7.     End If
  8. End Sub
複製代碼
  1. Private Sub UserForm_Initialize()         '  UserForm(表單) 初始化時的事件程序
  2.     Dim i As Integer

  3.     '  請先在UserForm(表單) 加入4個 Label控制項
  4.     '  系統自動命名(Label1, Label2 , Label3 , Label4)
  5.     '  請自行調整 4個 Label控制項 的位置,長,寬,高
  6.    
  7.     For i = 1 To 4
  8.         With Me.Controls("Label" & i)
  9.             .TextAlign = 1                      '  fmTextAlignCenter
  10.             .Font.Bold = True
  11.             .Font.Size = 15
  12.             .SpecialEffect = fmSpecialEffectEtched
  13.         End With
  14.     Next

  15.     If Caption = "UserForm1" Then Caption = Format(Now, "Dddddd ttttt ")
  16.     ThisWorkbook.showUsrForm
  17. End Sub
複製代碼
視覺感就OK了。
作者: GBKEE    時間: 2012-10-16 08:28

回復 65# c_c_lai
你已將兩個程序各加入showUsrForm,請按 F8  執行 Sub 摩台價差() 可看看  UserForm1.Show 是如何操作

  1. Private Sub UserForm_Initialize()   'UserForm(表單) 初始化時的事件程序
  2.     '  If Caption = "UserForm1" Then Caption = Format(Now, "Dddddd ttttt ")
  3.      ' 這 If Caption = "UserForm1"  是多餘的  
  4.         Caption = Format(Now, "Dddddd ttttt ")
  5. End Sub
複製代碼

作者: c_c_lai    時間: 2012-10-16 08:39

回復 66# GBKEE
我知道,這是故意放上的,因一開始會顯示 UserForm1 不好看才放上的,
謝謝您!
順便請教,在如何自動篩選+存到新工作表裡,最後為什麼要 .Rows(xlRow).Delete
刪除 xlRow 那筆紀錄呢? 因為它有 2 筆呢。
作者: minyow    時間: 2012-10-16 08:57

是否应將MINUTE改為SECOND
作者: GBKEE    時間: 2012-10-16 09:03

回復 67# c_c_lai
對樓主的發問不太明瞭    回覆有說 是這樣嗎?  
如有2筆資料 須修改為
  1.     .Cells.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Offset(2).Delete xlUp
複製代碼

作者: c_c_lai    時間: 2012-10-16 09:39

回復 68# minyow
間格時段可依你個人需求予以更動的,
譬如: 一秒、五秒、十秒、二十秒、三十秒等,
亦或是一分、五分、十分、二十分、三十分。
你只要異動間格時段該欄位值即可,非常方便。
盤中修正它會在異動後之下一輪迴自動修正的。
作者: c_c_lai    時間: 2012-10-16 09:45

回復 69# GBKEE
我指的是:
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Car_No As String, xlRow As Integer
  4.    
  5.     With Sheet1
  6.         .Activate
  7.         .AutoFilterMode = False
  8.         
  9.         Car_No = InputBox("請輸入車號")
  10.         If Car_No = "" Then MsgBox "沒輸入 車號 ??" & Car_No: Exit Sub
  11.         
  12.         .Rows(2).Cells(1).AutoFilter Field:=9, Criteria1:=UCase(Car_No)   ' 9 - 車號
  13.         '  AutoFilter 執行完畢後,此時工作表單內容僅會顯示與Car_No條件吻合之資料項。
  14.         '  假設原有5筆紀錄,而吻合條件的只有2筆,那此時表單內容只顯示出那2筆資料錄。
  15.         xlRow = .Rows(2).Cells(9).End(xlDown).Row
  16.         
  17.         If xlRow <> Rows.Count Then                      '  Rows.Count = 65536
  18.             .Cells.SpecialCells(xlCellTypeVisible).Copy  '  將表單內所有內容複製。
  19.         Else
  20.             MsgBox "找不到 車號 !! " & Car_No:      Exit Sub
  21.         End If
  22.         
  23.         With Sheets.Add(, Sheets("sheet1"))   ' 在原sheet1後新增一個工作表單(工作表1)
  24.             .Paste                            ' 將複製之所有內容貼入至新表單內。
  25.             Application.CutCopyMode = False
  26.             .Name = .[i3]                     ' 將新增之工作表單,命名為Car_No的內容。
  27.             .[a1].Select                      ' 將游標移至 A1 欄位上。
  28.         End With
  29.         
  30.         .Rows(xlRow).Delete                   ' 將原sheet1內第xlRow列資料項刪除掉。([color=Red]Why?[/color])
  31.         .AutoFilterMode = False
  32.         .Activate
  33.     End With
  34. End Sub
複製代碼

作者: c_c_lai    時間: 2012-10-16 09:55

回復 70# c_c_lai
附上執行後之圖示畫面:
[attach]12791[/attach]
作者: GBKEE    時間: 2012-10-16 10:08

本帖最後由 GBKEE 於 2012-10-16 10:12 編輯

回復 72# c_c_lai
.Rows(xlRow).Delete
是在寫這程式時沒注意到同 一車號會有一筆資料以上所以只刪一行
http://forum.twbts.com/viewthread.php?tid=8048&rpid=45188&ordertype=0&page=1#pid45188
這裡已修改可刪多行
.Cells.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Offset(2).Delete xlUp
作者: c_c_lai    時間: 2012-10-16 10:30

回復 73# GBKEE
因為我非正科班出身,這行語法內的 Offset(2) 指的是?
是從第一列起算之下兩行 (即第三列) 起刪除,還是?
如果他有三列以上吻合條件的資料項又是如何處理?
作者: c_c_lai    時間: 2012-10-16 10:56

回復 75# GBKEE
我再次重新 DEBUG 一次,結果是:
[attach]12794[/attach]
雖然在實務上我知道要如何處哩,但人活著就是要多多學習,
不熟悉的語法要深切去瞭解,不是嘛?
作者: devidlin    時間: 2012-10-16 11:56

回復 69# GBKEE


    請問c大,此excel檔,可以打包成一個執行檔來用嗎?   謝謝。
作者: GBKEE    時間: 2012-10-16 13:46

回復 76# devidlin
那要在VB 中製成
取巧方式: 執行此檔案後, 可如  59# 的圖片 另開Excel程式,執行其他Excel活頁簿 .
作者: devidlin    時間: 2012-10-16 14:59

回復 77# GBKEE


    G大你好,可以試做1個範例來參考嗎?謝謝。
作者: GBKEE    時間: 2012-10-16 16:01

本帖最後由 GBKEE 於 2012-10-16 16:03 編輯

回復 78# devidlin
依55# 的附檔 很簡單的自己練習看看,
表單要先弄好的,將程式碼更新為如下,存檔後再開啟看看.
ThisWorkbook程式碼
  1. Dim AA As New Application   '新的Excel 物件
  2. Sub Workbook_Open()
  3.     Application.Visible = False
  4.     With AA
  5.         .Visible = True
  6.         .WindowState = xlNormal
  7.         .Left = 242
  8.         .Top = 59
  9.         .Width = 648
  10.         .Height = 401
  11.     End With
  12.     UserForm1.Show
  13. End Sub
複製代碼
UserForm(表單)程式碼
  1. Dim Msg As Boolean
  2. Private Sub UserForm_Initialize()   'UserForm(表單) 初始化時的事件程序
  3.     '請先在UserForm(表單) 加入4個 Label控制項
  4.     '系統自動命名(Label1, Label2 , Label3 , Label4)
  5.     '請自行調整 4個 Label控制項 的位置,長,寬,高
  6.     Dim i As Integer
  7.     StartUpPosition = 0
  8.     Top = 1
  9.     For i = 1 To 4
  10.         With Me.Controls("Label" & i)
  11.             .TextAlign = 1 ' fmTextAlignCenter
  12.             .Font.Bold = True
  13.             .Font.Size = 15
  14.             .SpecialEffect = fmSpecialEffectEtched
  15.         End With
  16.     Next
  17. End Sub
  18. Private Sub UserForm_Activate()       'UserForm(表單) 顯示時的事件程序
  19.     Dim xlTile As String, S As String
  20.     S = Space(5)
  21.     Do Until Msg = True
  22.         DoEvents
  23.         If Time < #8:00:00 AM# Then
  24.             xlTile = "尚未開盤"
  25.         ElseIf Time > #1:30:00 PM# Then
  26.             xlTile = "已收盤"
  27.         Else
  28.             xlTile = "營業中"
  29.         End If
  30.         If Not Msg Then Caption = Format(Now, "Dddddd ttttt ") & xlTile
  31.         If xlTile <> "尚未開盤" Then
  32.             Label1.Caption = S & [sheet1!K1] & S & [ROUND(sheet1!K2,3)]
  33.             Label2.Caption = S & [sheet1!L1] & S & [ROUND(sheet1!L2,3)]
  34.             Label3.Caption = S & [sheet1!M1] & S & [ROUND(sheet1!M2,3)]
  35.             Label4.Caption = S & [sheet1!N1] & S & [ROUND(sheet1!N2,3)]
  36.         End If
  37.     Loop
  38. End Sub
  39. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'UserForm(表單) 關閉時的事件程序
  40.     Msg = True
  41.     Application.Visible = True
  42.     ThisWorkbook.Save
  43.     Application.Quit
  44. End Sub
複製代碼

作者: devidlin    時間: 2012-10-16 19:01

回復 79# GBKEE


    G大你好,我想大大好人做到底,幫忙用vb打包一下,因小地手邊沒有Visual Basic可以嗎?     謝 謝。
作者: GBKEE    時間: 2012-10-16 20:33

回復 80# devidlin
它還是Excel 檔案


[attach]12798[/attach]
作者: c_c_lai    時間: 2012-10-17 07:43

回復 81# GBKEE
表單 (UserForm) 開啟後,是無法再開啟其它 Excel 工作表單的,
所以之前我才會建議使用其它程式工具來解決此困擾問題。
作者: GBKEE    時間: 2012-10-17 08:18

回復 82# c_c_lai
再試試看
如真的不可以 那請在 2003版本下試試看
  1. Dim AA As New Application
  2. Sub Workbook_Open()
  3.     Application.Visible = False
  4.     With AA
  5.         .Visible = True
  6.         .WindowState = xlNormal
  7.         .Left = 242
  8.         .Top = 59
  9.         .Width = 648
  10.         .Height = 401
  11.         With .FileDialog(msoFileDialogFilePicker)
  12.             .Show
  13.             If .SelectedItems.Count > 0 Then
  14.                 .Parent.Workbooks.Open (.SelectedItems(1))
  15.             Else
  16.                 .Parent.Workbooks.Add
  17.             End If
  18.         End With
  19.     End With
  20.     UserForm1.Show
  21. End Sub
複製代碼

作者: c_c_lai    時間: 2012-10-17 09:06

回復 83# GBKEE
謝謝您!
目前手頭上的三台電腦都是跑 2010 版的,
如果在上頭再安裝 2003 版是會亂掉的。
我會想辦法去找部 2003 版本的試試看!
作者: CA199    時間: 2012-11-8 11:54

本帖最後由 GBKEE 於 2013-9-8 20:19 編輯

C_C lai 大大:

這個討論區真不錯~
我是新學生,因權限不足,請問可以把自動記錄每分鐘委買賣均值.rar檔案及元大盤中DDE紀錄寄至下列信箱嗎?
******感激不盡~~~
CA199敬上
這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: CA199    時間: 2012-11-9 14:20

謝謝CC L
感激涕零~~金感動的ㄋㄟ
作者: junchinc    時間: 2012-11-20 22:43

本帖最後由 GBKEE 於 2013-9-8 20:18 編輯

C_C lai 大大 您好:

我是新學生,因權限不足,請問可以把自動記錄每分鐘委買賣均值.rar檔案及元大盤中DDE紀錄寄至下列信箱嗎?
**********
感激不盡~~~
謝謝
Jun敬上
這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: jesse    時間: 2012-11-21 11:35

剛入門正好需要這個資料!感謝分享!
作者: karena08    時間: 2012-11-27 10:12

本帖最後由 GBKEE 於 2013-9-8 20:17 編輯

C_C lai 大大 您好:

我也是新學生,因權限不足,請問可否把
1.自動記錄每分鐘委買賣均值.rar
2.元大盤中DDE紀錄
寄至*****************************嗎?
感恩~
這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: c_c_lai    時間: 2012-11-27 12:07

回復 87# karena08
收收 E-Mail

P.S.  請點選 "回復" 選紐, 如此當事人才知道有人回應內容,
        這也是一種禮貌。
作者: r2henry    時間: 2012-11-28 15:42

本帖最後由 GBKEE 於 2013-9-8 20:17 編輯

回復 30# c_c_lai

我是小學生,收不到,可以麻煩寄到email 信箱嗎?
再次感謝......
************************


這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: c_c_lai    時間: 2012-11-28 16:22

回復 89# r2henry
收收 E-Mail。
作者: r2henry    時間: 2012-11-29 15:31

回復 90# c_c_lai

檔案已收到,真是感謝。
作者: epyon    時間: 2012-12-5 13:27

謝謝a8350070  和c_c_lai 用心的解說
看來可得好好學習了
作者: osmonda    時間: 2013-1-8 14:09

感謝!非常實用的程式~\(^ ^\)(/^ ^)/~
作者: jimmy68    時間: 2013-3-15 16:58

有沒有辦法自動畫K線
作者: yyyggg    時間: 2013-9-2 15:56

回復 12# c_c_lai

謝謝c_c_lai大大的分享
小弟再回去努力看看
作者: handsometrowa    時間: 2013-9-4 11:04

回復 8# c_c_lai


    感謝分享,我會把此篇做成紀錄的

想請問CC大,這個抓資料的動態資料庫

有配合的圖表或是圖表的VBA寫法嗎@@?
作者: c_c_lai    時間: 2013-9-4 14:19

回復  c_c_lai


    感謝分享,我會把此篇做成紀錄的

想請問CC大,這個抓資料的動態資料庫

有配 ...
handsometrowa 發表於 2013-9-4 11:04

你的意思是說開啟DDE動態連結後,除了匯入DDE資料,統計圖表亦可同步隨之動態變化?
答案是可以做到的。
作者: minghg    時間: 2013-9-8 19:13

本帖最後由 GBKEE 於 2013-9-8 20:15 編輯

回復 90# c_c_lai

C_C lai 大大好:

我也是新學生,因權限不足,可以把自動記錄每分鐘委買賣均值.rar檔案及元大盤中DDE紀錄寄至下列信箱嗎?
*****************
感謝您

這是公開的論壇,個人的Mail,請在個人資料裡顯示

作者: c_c_lai    時間: 2013-9-8 20:02

回復 98# minghg
Check E-Mail.
作者: QyuwR9U8    時間: 2013-9-21 08:33

C_C lai 大好:
我是新學生,因權限不足,請問可以把自動記錄每分鐘委買賣均值.rar檔案及元大盤中DDE紀錄寄至到晚輩信箱嗎?
感謝C_C lai 大分享~~~




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