- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
13#
發表於 2012-4-15 09:43
| 只看該作者
回復 11# ajagow
欄位的確認非常重要,你的語法我稍加修改了一下,大體上也都不錯,只是時間欄位的認定模糊而已,
我將修改之處用 ' ******** 加以標示出來,方便你瞭解無法執行的原因,下回你就會實際應用了。
附上已執行的範例,以及你的修改後之程式碼 (因你尚無法下載,所以將它貼示出來),你將程式碼複製到 ThisWorkbook 內,而將模組移除掉。
- ' 盤中 DDE 存檔的實際應用範例
- Option Explicit
- Dim actEnabled As Boolean
- Dim CIndex As Single
-
- Private Sub Workbook_Open()
- If (Sheets("工作表1").Range("A1").Value = "") Then Sheets("工作表1").Range("A1").Value = "01:11:00" ' 假設A1欄位為空白,則寫入開盤起始時間
- If (Sheets("工作表1").Range("A2").Value = "") Then Sheets("工作表1").Range("A2").Value = "13:45:59" ' A2欄位亦同。(此兩欄紀錄起始終止時間)
- If (Sheets("工作表1").Range("A3").Value = "") Then Sheets("工作表1").Range("A3").Value = 0 ' 紀錄最後資料匯入之列號 (Rows)。
- If (Sheets("工作表1").Range("A4").Value = "") Then Sheets("工作表1").Range("A4").Value = "00:00:10" ' 紀錄資料匯入相隔時間,如每隔十秒寫入一次。
-
- ' If (TimeValue(Now) > Sheets("工作表1").Range("A2").Value) Then ' ******** 你打算何時開始運作?13:45:59 以後?
- If (TimeValue(Now) > Sheets("工作表1").Range("A1").Value) Then ' 如果目前時間業已超過A2的時段,則呼叫.......
- ' Call stopProcedure ' ***** 時間到了,難道你不要執行?
- Call startProcedure
- Else ' 反之,則呼叫.......
- Call stopProcedure
- ' Call startProcedure ' ***** 請問你是要它在 14:00 ~ 01:09 間執行?
- End If
- End Sub
-
- Private Sub Workbook_BeforeClose(Cancel As Boolean)
- On Error Resume Next
- Call actStop
- End Sub
-
- Sub startProcedure() ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
- Call actStart
- End Sub
-
- Sub stopProcedure() ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
- Call actStop
- End Sub
-
- Sub newTitle()
- ' 套上你欲匯入資料的表頭名稱
- End Sub
-
- Sub Starter()
- If (actEnabled = True And TimeValue(Now) >= Sheets("工作表1").Range("A1").Value And TimeValue(Now) <= Sheets("工作表1").Range("A2").Value) Then
- CIndex = Sheets("工作表1").Range("A3").Value
-
- If (CIndex = 0) Then Call newTitle '假設newTitle程序(由使用者自行定義)是將第一列的資料抬頭名稱寫入到工作表2。 如:日期、時間、R1C5的對應欄位資料等。
-
- Sheets("工作表1").Range("A3").Value = CIndex + 1 ' 紀錄列號加一。
- Sheets("工作表2").Cells(CIndex + 2, 1).Value = Date
- Sheets("工作表2").Cells(CIndex + 2, 2).Value = TimeValue(Now)
- ' Sheets("工作表2").Cells(CIndex + 2, 3).Value = Sheets("工作表1").Cells(1, 5).Value
- Sheets("工作表2").Cells(CIndex + 2, 3).Value = Sheets("工作表1").Cells(6, 1).Value ' 測試, 因今天不賣魚, 你的指定欄位有點..........
-
- '
-
- ' 複製從券商DDE匯入之相對應位置資料,如 R1C5 對應的可能是收盤價等等。
-
- '
- CIndex = Sheets("工作表1").Range("A3").Value ' ********* 增加部分 (Counter 要加一,否則永遠為零)
- End If
- End Sub
-
- Sub onStarter()
- Call Starter
- If actEnabled Then Call actStart
- End Sub
-
- Sub actStart()
- actEnabled = True
- ' Application.OnTime (Now + Sheets("工作表2").Range("A4").Value), "ThisWorkBook.onStarter" ' ***** 工作表 2 的 A4 哪來個時間設定?
- Application.OnTime (Now + Sheets("工作表1").Range("A4").Value), "ThisWorkBook.onStarter" ' 寫入資料的排程 (目前是每隔十秒寫入一次)
- End Sub
-
- Sub actStop()
- actEnabled = False
-
- On Error Resume Next
- Application.OnTime Now, "ThisWorkBook.onStarter", , False
- End Sub
複製代碼
DDE-4-14 盤中 DDE 存檔與 VBA 的實際應用範例.rar (14.01 KB)
|
|