alextpe 發問時間: 電腦與網際網路軟體 · 6 年前

如何將 2個巨集同時抓DDE資料到不同sheet 執行記錄

想將DDE資料分傳至sheet 1、sheet 3,執行記錄不同時間資料。

因對VBA不熟,套用爬文的資料修改使用,以下原程式碼

Public uMode&, StartTime, EndTime

Public MyBook As Workbook, Sht1 As Worksheet, xRow&

Sub 共同參照()

Set MyBook = ThisWorkbook

Set Sht1 = MyBook.Sheets("1K資料")

StartTime = "08:29:30" '開盤

EndTime = "13:50:59" '收盤

End Sub

Sub 記錄資料()

If uMode = 0 Then Exit Sub

If Time > TimeValue(EndTime) Then

uMode = 0

Exit Sub

End If

Sht1.Range("AA1") = Time

'----------------------------------------------------------

If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then

xRow = Sht1.Range("A65536").End(xlUp).Row + 1

Sht1.Range("A" & xRow & ":z" & xRow).Value = Sht1.Range("A1:z1").Value

Sht1.Range("AA" & xRow).Value = Time

ThisWorkbook.Save '存檔

End If

Application.OnTime TimeSerial(Hour(Time), Minute(Time) + 1, 0), "記錄資料"

End Sub

Sub 執行()

If uMode = 1 Then Exit Sub

Call 共同參照

uMode = 1

Call 記錄資料

End Sub

Sub 停止()

uMode = 0

Call 共同參照

End Sub

請教,我要增加一張sheet3 (記錄5分K資料。Sheet 2 接收資料...)。sheet1記錄1分K,sheet3 記錄5分K,嘗試在"記錄資料"中再加 一 sheet3,但當然是無法正確執行了....。

另外如果要設定sheet3 /5分K的資料能準整時擷取(05:00、10:00....)要如何設定?

謝謝!

已更新項目:

感謝cascade 大大熱心提供協助。

可惜對於 sheet3依然沒有任何動靜?

2 個已更新項目:

Sheet3是沒有問題。

Sheet3的資料格式、位置都與Sheet1一樣,只是記錄資料時間不同而已。

Sheet3 的"AA1"格無同Sheet1一樣更新,Sht1.Range("AA1") = Time

所以仍是無法執行......

3 個已更新項目:

非常感謝准提部林大大的程式提供。

看內容正是我想要的功能,同時也要跟准提部林說真的很感激,因為我幾乎都是使用了大大你之前提供的程式來運用!

想把此功能再演進成為,一個Sheet裡可規劃出1K、5K同時記錄執行,是否可行?會不會互相干擾資料接收?

謝謝。

4 個已更新項目:

感謝准提部林大大提供了解決,但是屬於"意見"欄無法選為最佳解答?好像只能放棄選擇扣分.....

2 個解答

評分
  • 6 年前
    最佳解答

    這樣試試如何:

    1.請修改變數定義

    Public MyBook As Workbook, Sht1 As Worksheet, xRow&→請改成Public MyBook As Workbook, Sht1 As Worksheet, xRow&, xRow1&

    2.修改[記錄資料]巨集

    Sub 記錄資料()

    If uMode = 0 Then Exit Sub

    If Time > TimeValue(EndTime) Then

    uMode = 0

    Exit Sub

    End If

    Sht1.Range("AA1") = Time

    '----------------------------------------------------------

    If Second(Time) = 0 And Minute(Time) Mod 1 = 0 Then

    xRow = Sht1.Range("A65536").End(xlUp).Row + 1

    Sht1.Range("A" & xRow & ":z" & xRow).Value = Sht1.Range("A1:z1").Value

    Sht1.Range("AA" & xRow).Value = Time

    ThisWorkbook.Save '存檔

    End If

    If Second(Time) = 0 And Minute(Time) Mod 5= 0 Then

    Sheets("Sheet3").Range("A1:z1").Value=Sht1.Range("A1:z1").Value

    xRow1 = Sheets("Sheet3").Range("A65536").End(xlUp).Row + 1

    Sheets("Sheet3").Range("A" & xRow1 & ":z" & xRow1).Value = Sheets("Sheet3").Range("A1:z1").Value

    Sheets("Sheet3").Range("AA" & xRow1).Value = Time

    ThisWorkbook.Save '存檔

    End If

    Application.OnTime TimeSerial(Hour(Time), Minute(Time) + 1, 0), "記錄資料"

    End Sub

    因我並沒有DDE程式,單純從VBA程式碼去做調整,試試看!

    2014-07-10 10:12:22 補充:

    請檢查工作表Sheet3的名稱是sheet3還是Sheet3,如果是sheet3請改成Sheet3試試

    2014-07-11 10:14:55 補充:

    把這程式碼

    If Second(Time) = 0 And Minute(Time) Mod 5= 0 Then

    程式碼......

    'ThisWorkbook.Save '存檔→前面要加一個'符號

    End If

    移到

    Sht1.Range("AA" & xRow).Value = Time

    ThisWorkbook.Save '存檔

    這兩行的中間試試

    參考資料: 自己模擬, 自己, 自己
  • 6 年前

    <參考檔>:

    http://www.funp.net/55756

    2014-07-12 19:59:11 補充:

    001即是同時記錄1分及5分資料,

    惟所記錄是否為同一DDE公式範圍值?

    若不相同,修一下COPY來源即可!

還有問題?馬上發問,尋求解答。