返回列表 上一主題 發帖

[發問] 關於工作表的calculate事件

本帖最後由 c_c_lai 於 2013-6-15 07:54 編輯

回復 1# lin_6219
看了你數日的討論成果,還是給你個提示吧,要加油呦!
思考問題要多方的驗證及觀察,以期能切入到真正的問題核心。
觸發執行畫動態的圖表:
  1. Option Explicit

  2. Dim timerEnabled As Boolean        '   判定開啟本工作表單的時段是否為開盤前啟動。
  3. Private Sub Workbook_Open()
  4.     KChartWithVolume                        '   以你自己的 K 圖做為例證
  5.     '   每逢星期六、日 除外, 自動啟動計時器
  6.     If Weekday(Date, 2) <= 5 Then Call timerStart
  7. End Sub

  8. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  9.     On Error Resume Next
  10.     Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.inProcess", , False
  11.     Me.Save
  12. End Sub

  13. Sub timerStart()
  14.     If timerEnabled Then
  15.         ' 第二次(含)以後均以設定之 "間隔時段" 來處理執行序的作業。 (本例以每五分鐘執行一次)
  16.         Application.OnTime (Now + TimeValue("00:05:00")), "ThisWorkbook.inProcess"
  17.     Else
  18.         timerEnabled = True
  19.         
  20.         If (TimeValue(Now) <= TimeValue("08:45:00")) Then
  21.             Application.OnTime (TimeValue("08:45:00")), "ThisWorkbook.inProcess"
  22.         Else
  23.             ' 系統剛連上 DDE 至資料匯入Excel工作表單,須有一個緩衝時段,
  24.             ' 這時如果馬上去抓取DDE資料,會有型態不符的錯誤訊息產生,並中斷執行序的作業。
  25.             Application.OnTime (Now + TimeValue("00:00:05")), "ThisWorkbook.inProcess"
  26.         End If
  27.     End If
  28. End Sub

  29. Private Sub inProcess()
  30.     On Error Resume Next
  31.     If (TimeValue(Now) < TimeValue("08:45:00") Or TimeValue(Now) > TimeValue("13:46:01")) Then Exit Sub
  32.    
  33.     ' 盤中處理,將資料匯入寫入工作表單內儲存。

  34.     With Sheets("主畫面")
  35.         ' . . . . .
  36.         ' . . . . . (寫入DDE匯入之相關資料))
  37.         ' . . . . .
  38.     End With
  39.         
  40.     Call getKLastMove()     '  觸發執行畫動態的圖表
  41.     Call timerStart
  42. End Sub

  43. Sub getKLastMove()
  44.     Dim totalRows As Long
  45.    
  46.     With Worksheets("主畫面")
  47.         .Select
  48.         totalRows = Worksheets("繪圖資料").Range("A" & .Rows.Count).End(xlUp).Row
  49.         ActiveSheet.ChartObjects.Select
  50.         With ActiveChart
  51.             .SetSourceData Source:=Range("繪圖資料!$A$2:繪圖資料!$E$" & CStr(totalRows) & ", 繪圖資料!$G$2:繪圖資料!$G$" & CStr(totalRows) &  _
  52.                                          ", 繪圖資料!$F$2:繪圖資料!$F$" & CStr(totalRows))
  53.             .SeriesCollection(1).Name = "=繪圖資料!$B$1"           ' 開盤價
  54.             .SeriesCollection(2).Name = "=繪圖資料!$C$1"           ' 最高價
  55.             .SeriesCollection(3).Name = "=繪圖資料!$D$1"           ' 最低價
  56.             .SeriesCollection(4).Name = "=繪圖資料!$E$1"           ' 收盤價 (成交價)
  57.             .SeriesCollection(5).Name = "=繪圖資料!$G$1"           ' 移動平均線
  58.             .SeriesCollection(5).Name = "成交量"                   ' 成交金額
  59.         End With
  60.     End With
  61. End Sub

  62. Sub KChartWithVolume()                         '  K線圖與成交量圖放在同一圖表
  63.     ' . . . . .
  64.     ' . . . . .  (K線圖與成交量圖)
  65.     ' . . . . .
  66. End Sub
複製代碼
多跟學校教授及同學們相互請益。

TOP

回復 8# lin_6219
首先要先去瞭解及熟悉 F8 (Debug) 的應用,
透過 F8 你再去追蹤 Local Variables 值的變化,
以及利用 "監看式" 視窗 "運算式" 觀察目前之
Runtime Values, 如此你可以從中去體會程式
完整執行過程、以及問題發生錯誤的原因。

TOP

        靜思自在 : 稻穗結得越飽滿,越會往下垂,一個人越有成就,就要越有謙沖的胸襟。
返回列表 上一主題