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

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

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

2 個已更新項目:

Sheet3是沒有問題。

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

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

3 個已更新項目:

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 補充：

００１即是同時記錄１分及５分資料，

惟所記錄是否為同一ＤＤＥ公式範圍值？

若不相同，修一下ＣＯＰＹ來源即可！