返回列表 上一主題 發帖

[發問] DDE資料紀錄問題

回復 17# GBKEE

再次非常感謝GBKEE大大的熱心協助
明天開盤再試看看,謝謝您
stock

TOP

本帖最後由 GBKEE 於 2013-7-16 07:09 編輯

回復 16# usana642
  1. Option Explicit
  2. Sub Auto_Open() '開檔時自動執行此巨集
  3.     GetDDE  '呼叫程序
  4. End Sub
  5. Sub GetDDE()
  6.     Dim T As Date, A
  7.     'T = Now  'Now 包含日期     >1,,' T = Time '只有24小時的數值 <1
  8.     '輸入  #9:00#  ->系統自動成  #9:00:00 AM#
  9.     '輸入  #13:00# ->系統自動成  #1:00:00 PM#
  10.     '輸入  #00:05# ->系統自動成  #12:05:00 AM#   :  5分鐘
  11.     '------  1.再加入台股或美股開收盤時間,來設定接收時間
  12.     If Time > #9:00:00 AM# And Time < #1:30:00 PM# Then    '於交易時間內
  13.         If Not IsError(Sheets(1).[B2]) Then Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) = Sheets(1).[A2:G2].Value  '工作表1的資料DDE連結成功寫入工作表2
  14.     '------  2.將接收進來的資料時間修正為" 分鐘整數",例如 10:15:10  ---> 10:15:00
  15.     End If
  16.     T = Time + #12:00:30 AM#                         '--間隔30秒---------
  17.     'T = Time + #12:01:00 AM#                         '--間隔1分鐘---------
  18.     'T = Time + #12:05:00 AM#                         '--間隔5分鐘---------
  19.     Application.OnTime T, "GetDDE"
  20. End Sub
複製代碼

TOP

回復 15# GBKEE


    不好意思,我就是按照超級版主的程式,程式如下:

Sub auto_open()'開檔時自動執行此巨集
GetDDE  '呼叫程序
End Sub
Sub GetDDE()
Dim T As Date
T = Now  '取得現在時間
If Not IsError(Sheets(1).[B2]) Then Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 7) = Sheets(1).[A2:G2].Value  '工作表1的資料DDE連結成功寫入工作表2
Application.OnTime T + TimeValue("00:00:02"), "GetDDE"  '這是以2秒測試,間隔5分鐘改成TimeValue("00:05:00"),
End Sub

我想

1.再加入台股或美股開收盤時間,來設定接收時間
2.將接收進來的資料時間修正為" 分鐘整數",例如 10:15:10  ---> 10:15:00

請問要如何修改?謝謝您的協助
stock

TOP

回復 13# 14# usana642
可附檔上來看你如何寫的
PS:請按回復鍵 回文者才會知道的

TOP

再請教一個問題,如何將接收進來的資料時間修正為" 分鐘整數",例如 10:15:10  ---> 10:15:00 ,請問要如何修改?謝謝協助...
stock

TOP

非常感謝GBKEE大大的熱心分享,已經成功了,另外再請教,如果要加入台股或美股開收盤的接收時間,請問要如何修改?謝謝您
stock

TOP

本帖最後由 GBKEE 於 2012-6-22 08:25 編輯

回復 11# usana642
本身的模組中 直接呼叫  程序名稱即可 ->  GetDDE

物件模組內 :工作表物件模組 (SHEET1 . SHEET2.....) , 活頁簿物件模組 ThisWorkbook ,中
公用:   Sub  GetDDE ()  =    Public Sub  GetDDE ()     Public  模組層次的關鍵字,用來宣告在所有模組裏的所有程序中都可以使用常數
在其他模組的程序中 乎叫GetDDE    ->    SHEET1.GetDDE
私用:  Private  Sub  GetDDE ()                                        Private 模組層次的關鍵字,用來宣告只在已宣告的模組裏才可以使用常數
在其他模組的程序中 乎叫GetDDE   ->     Run  "SHEET1.GetDDE"

一般模組內 :   Module1,中
Sub  GetDDE ()  =    Public Sub  GetDDE ()     在其他模組的程序中 乎叫GetDDE  ->      GetDDE
私用:  Private  Sub  GetDDE ()     在其他模組的程序中 乎叫GetDDE    ->    Run  "Module1.GetDDE"

TOP

請問我執行程式時,為何會跳出''找不到巨集GetDDE''的警告視窗?懇請各位大大的回覆,謝謝

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

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

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題