返回列表 上一主題 發帖

[發問] DDE資料紀錄問題

[發問] DDE資料紀錄問題

小女子有個問題想請教一下..
下圖是我所捷取的卷商DDE資料.爬文後還是找不到如何撰寫VBA
我想吧它每5分鐘的資料.紀錄在另一個工作表中.可以嗎..請各位大大為我解答一下..謝謝..

回復 1# chenua
一般模組輸入以下程式碼,存檔後開啟檔案,測試看看
  1. Sub auto_open()'開檔時自動執行此巨集
  2. GetDDE  '呼叫程序
  3. End Sub
  4. Sub GetDDE()
  5. Dim T As Date
  6. T = Now  '取得現在時間
  7. If Not IsError(Sheets(1).[B2]) Then Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) = Sheets(1).[A2:G2].Value  '工作表1的資料DDE連結成功寫入工作表2
  8. Application.OnTime T + TimeValue("00:00:02"), "GetDDE"  '這是以2秒測試,間隔5分鐘改成TimeValue("00:05:00"),
  9. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 2# Hsieh


    大概可以了..謝謝版主解答

TOP

回復 2# Hsieh
回復 3# chenua
我將以能作業的 工作表單 附上, Chenua 妳可以試試看, 如附圖所見。

Hsieh大大,想請教您的是:
(1) 上圖左半部分, 從 A2:A21 的資料室應用 If Not IsError(Sheets(1).[B2]) Then Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) =
       Sheets(1).[A2:G2].Value  的方式處理。 為什麼 工作表1 的 A2 資料一轉到 工作表2 的欄位,01:44 PM -> 0.572905 ?
      所以我便將它的處裡改成 Sheets("工作表2").Cells(CIndex + 2, 1).Value = Sheets("工作表1").Cells(2, 1).Value 結果一樣,
      因為由 DDE 匯入的時間欄位是 A3 (=YT|KS!TXFE2.123),  匯入內容為 134459,此欄數據資料無法應用,故將它轉型到 A2 欄位
      (=TIME(LEFT(A3,LEN(A3)-4),MID(A3,LEN(A3)-3,2),RIGHT(A3,2))),目前如果從 A3 區出資料就會有問題,所以又再將它改成
     Sheets("工作表2").Cells(CIndex + 2, 1).Value = TimeValue(Now) 的方式,如附圖上的 A22LA28。
(2) 假設目前我想將 A2:G2,K2:P2,以及 H5:J5 等欄位同時抓取的話,如使用像 Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) =
       Sheets(1).[A2:G2].Value  的方式來做處理,請教在語法上應怎麼來表達呢?
謝謝您的指導!
DDE 資料紀錄問題.rar (13.19 KB)

TOP

回復 3# chenua
我將檔案傳E-Mail給妳了,收收看!

TOP

本帖最後由 GBKEE 於 2012-4-26 18:01 編輯

回復 4# c_c_lai
工作表2 的欄位 須設好格式
為什麼 工作表1 的 A2 資料一轉到 工作表2 的欄位,01:44 PM -> 0.572905 ?
0.572905是數字   01:44 PM 是儲存格的格式

Sheets("工作表2").Cells(CIndex + 2, 1) = Sheets("工作表1").Cells(2, 1).Text

TOP

回復 6# GBKEE
謝謝您! 經過測試的結果,發現如果將
Sheets("工作表2").Cells(CIndex + 2, 1).Value = Sheets("工作表1").Cells(2, 1).Value 更改成
Sheets("工作表2").Cells(CIndex + 2, 1).Value = Sheets("工作表1").Cells(2, 1).Text 的確 OK。

但是 Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) = Sheets(1).[A2:G2].Value 更改為
Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) = Sheets(1).[A2:G2].Text 就不行了,
結果都沒有任何資料寫入,那豈不說無法完全使用 Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7)
= Sheets(1).[A2:G2].Value 的方式處理呦?

TOP

回復 7# c_c_lai


    Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7)= Sheets(1).[A2:G2].Value
這樣的寫入是以陣列型態寫入,所以不能使用
    Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7)= Sheets(1).[A2:G2].Text
你的問題只是格式的問題
只需將兩個工作表對應欄位格式先設成相同即可使用
例如:Sheets(1)的A2是時間,格式應該是"h:mm:ss"
你就把Sheets(2)的A欄格式也設定成"h:mm:ss"
play.gif
學海無涯_不恥下問

TOP

回復 8# Hsieh
實務上,被寫入端未必只有 "工作表單2",有可能是動態產生的工作表單,
甚或是每日一份不同之工作表單來記錄交易紀錄,依照您的意思是先行將此欄位
將它先予以格式化再行處理嗎? 是不是這樣?  Sheets("Good Morning").[A].Formula = "hh:mm:ss"
(對不起,我之前都沒接觸過 Excel,是最近才開始跟各位先進學習的, 且目前之 VBA 程式語法都是憑藉以往的其它語言的撰寫經驗來採摩的)
如此勢必每在產生一心表單之前,就要先行處理此格式化,但是 A1本欄是文字屬性敘述那沒關係嗎?

TOP

本帖最後由 Hsieh 於 2012-4-27 08:39 編輯

回復 9# c_c_lai

動態新增工作表為目的工作表時,預設格式通常是以通用格式
如果不願意使用程式碼於新增工作表時設定格式
可先製作好應有格式的工作表作為範本
於新增工作表時以插入範本為之
總之,一次性轉寫資料時應以value屬性寫入,不得以text寫入
若要以text寫入則必須一格一格寫入

Sheets("Good Morning").[A].Formula = "hh:mm:ss"
更改格式這樣的語法是錯誤的,建議你先以錄製巨集方式,取得基本程式碼
您有其他程式語言基礎,邏輯概念應該不是問題
你可從熟悉EXCEL的基本操作,去了解EXCEL VBA的特殊函數及物件屬性
因為語法就是VB語法,所以,基本功能了解越多,你的VBA運用才會越靈活
~共勉之~
學海無涯_不恥下問

TOP

        靜思自在 : 我們最大的敵人不是別人.可能是自己。
返回列表 上一主題