- 帖子
- 37
- 主題
- 0
- 精華
- 0
- 積分
- 41
- 點名
- 0
- 作業系統
- windows xp
- 軟體版本
- 2003
- 閱讀權限
- 10
- 性別
- 男
- 註冊時間
- 2010-5-7
- 最後登錄
- 2018-2-10
|
本帖最後由 kobo 於 2012-2-13 21:28 編輯
因權限無法下載檔案,故僅提供個人使用dde的經驗分享
Worksheet_Calculate事件:此事件會在重新計算工作表後發生。
首先必須清楚了解事件觸發的過程(多測試有助於你的工作),
當開啟檔案時,excel的工作表中如有dde連結,計算公式,或時間函數等(重新計算工作表)均會觸發此一事件,
所以您一開啟檔案且更新dde時,儲存格的dde資料尚未更新完全而Calculate事件己觸發,故發生錯誤,
解決方法如同 Hsieh 所述,
個人所使用的方法為建立一個開關(如何建立見仁見智)
例如:
Private Sub Worksheet_Calculate()
if [A1]=1 then Call Catch_DDE
End Sub
上述[A1]為開關,只有在[A1]=1時,方執行Catch_DDE
另避免Calculate觸發後,所執行的程序尚未執行完畢又再觸發而產生錯誤,
建議觸發後將 Application.EnableEvents = False
結束後再將 Application.EnableEvents = True
如上例改為
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
if [A1]=1 then Call Catch_DDE
Application.EnableEvents = True
End Sub
If IsError(.[J12]) Then Exit Sub 這一行 怎麼加不上去,出現編譯錯誤
研判您是在盤中修改程式,dde一直更新,不斷觸發Calculate,程式碼寫不完就觸發事件,當然產生錯誤,
如以後需盤中修改,建議可用複製程式碼再貼上或在修改的行上先加 ' ,變成註解後再編寫,完成後再刪除 '
SetLinkOnData 方法:設定每當更新 DDE 連線時執行的程序名稱。
由字義上說此法只有在 DDE 連線資料更新時方執行 您要設定的程序
故此法與Worksheet_Calculate事件有些不同,是可以分開使用的
這指的DDE是指有引入在工作表的DDE 代碼,
開盤價、最高價、最低價、成交價、成交量等各有各的DDE代碼
例:
Sub 設定成交量DDE()'只有在成交量資料更新時才會執行Catch_DDE,其他DDE代碼更新不會執行
ThisWorkbook.SetLinkOnData "YES|DQ!EXFB2.Volume", "Catch_DDE"
End Sub
Sub 解除成交量DDE()'成交量資料更新時 也不會執行先前所設定的程序
ThisWorkbook.SetLinkOnData "YES|DQ!EXFB2.Volume", ""
End Sub
Worksheet_Calculate事件 與 SetLinkOnData 方法 各有各的特點,還望使用者自行測試,
找出符合自己的需求.
祝您學習愉快 |
|