Board logo

標題: [發問] EXCEL連結DDE記錄問題 [打印本頁]

作者: daniel5168    時間: 2015-7-27 20:13     標題: EXCEL連結DDE記錄問題

問一下各位前輩們,有找到每分鐘紀錄股票的開高收低價位VBA,但有一個問題想了解,有可能在一個工作表裡把多檔股票結DDE然後每個股票開一工作表同時個別記錄每一分鐘開高低收價嗎?
作者: c_c_lai    時間: 2015-7-28 07:10

問一下各位前輩們,有找到每分鐘紀錄股票的開高收低價位VBA,但有一個問題想了解,有可能在一個工作表裡把多檔 ...
daniel5168 發表於 2015-7-27 20:13

只要你能把相關股票的開高收低價位匯入到工作表裡,之後你便能如願執行了。
作者: daniel5168    時間: 2015-7-28 08:28

本帖最後由 daniel5168 於 2015-7-28 08:29 編輯

回復 2# c_c_lai


ublic uMode&, StartTime, EndTime
Public MyBook As Workbook, Sht1 As Worksheet, Sht2 As Worksheet, xRow&

Sub 共用參照()
Set MyBook = ThisWorkbook
Set Sht1 = MyBook.Sheets("Sheet1")
StartTime = "08:44:50"  '開盤時間(提早十秒開始,才可記錄開盤量價)"08:44:50"
EndTime = "13:45:10"    '收盤時間(延後十秒停止記錄)此為測試用時間,請自行更改正式時間 "13:45:10"
End Sub

Sub 自動記錄()
If uMode = 0 Then Exit Sub
If Time > TimeValue(EndTime) Then '收盤時間以後不執行
    Sht1.[O8] = "已過收盤"
    uMode = 0
    Exit Sub
End If
Sht1.Range("B8") = Time '當前時間(時間碼表)
'----------------------------------------------------------
'每1分鐘記錄,5分鐘則改為 Mod 5
If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then
   xRow = Sht1.Range("A65536").End(xlUp).Row + 1
   If xRow < 9 Then xRow = 9
   Sht1.Range("A" & xRow & ":N" & xRow).Value = Sht1.Range("A8:N8").Value
   '------------------------------------------------
   If ActiveSheet.Name = Sht1.Name And xRow > 20 Then
      ActiveWindow.ScrollRow = xRow - 18 '讓最新資料保持在可見視窗中
   End If
   ThisWorkbook.Save   '存檔
   Beep
End If
Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
End Sub

Sub 開始執行()
If uMode = 1 Then Exit Sub
Call 共用參照
uMode = 1
Sht1.[O8] = "執行中"
Call 自動記錄
End Sub

Sub 停止執行()
uMode = 0
Call 共用參照
Sht1.[O8] = "STOP"
End Sub

Sub 清除記錄資料()
Beep
If MsgBox("※確定要清除〔Sheet1〕的記錄嗎? ", 4 + 32 + 256) = vbNo Then Exit Sub
Call 共用參照
Sht1.Rows("9:65536").ClearContents
If ActiveSheet.Name = Sht1.Name Then ActiveWindow.ScrollRow = 1
Beep
End Sub

這個是我找到的VBA 每一分鐘記錄一次
我該怎麼改成我想要的把商品同時分成數頁工作表同時分別每分鐘記錄一次
作者: GBKEE    時間: 2015-7-28 13:03

本帖最後由 GBKEE 於 2015-7-28 13:05 編輯

回復 3# daniel5168
試試看
  1. Sub 自動記錄()
  2.     Dim E As Variant, Rng As Range, t As Date, S As Integer, Shts()
  3.     Shts = Array("Sheet1", "商品1", "商品2", "商品3") '工作表在活頁簿的名稱
  4.     If uMode = 0 Then Exit Sub
  5.     For Each E In Shts
  6.         With Sheets(E)
  7.             ' .Activate 成為作用中的工作表
  8.             If Time > TimeValue(EndTime) Then '收盤時間以後不執行
  9.                 .[O8] = "已過收盤"
  10.                 uMode = 0
  11.                 GoTo For_Next 'Exit Sub
  12.             End If
  13.             .Range("B8") = Time '當前時間(時間碼表)
  14.             '----------------------------------------------------------
  15.             Set Rng = .Range("A65536").End(xlUp).Offset(1)
  16.             .Range("A" & Rng.Row & ":N" & Rng.Row).Value = .Range("A8:N8").Value
  17.             '------------------------------------------------
  18.             ActiveWindow.ScrollRow = IIf(Rng.Row > 20, Rng.Row - 18, 1) '讓最新資料保持在可見視窗中
  19.             Beep
  20.         End With
  21. For_Next:
  22.     Next
  23.     '------------------------------------------------
  24.     '下一個間隔的分鐘
  25.     S = 1  '每1分鐘記錄,5分鐘則改為5
  26.     t = Int(Application.Text(Time, "[m]") / S) + 1 '(總分鐘數/間隔的分鐘數) + 1
  27.     t = DateAdd("N", S * t, 0)                     '從0分鐘後的 T * 間隔的分鐘數
  28.     ThisWorkbook.Save   '存檔
  29.     Application.OnTime t, "自動記錄"
  30. End Sub
複製代碼

作者: daniel5168    時間: 2015-7-28 22:35

回復 4# GBKEE


    正在思考如何套入中,由於沒有程式設計的基礎,正在一行行的學習,如果我想不透又GOOGLE不出來答案可能又要請教您了,感謝您的熱心解答




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