- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
52#
發表於 2013-8-5 10:36
| 只看該作者
本帖最後由 c_c_lai 於 2013-8-5 10:38 編輯
回復 49# slip
今早我實際跑了一下你的程式 (有點語病),我略微修正了一些語法,並加上 Rng 變數宣告。
大約觀察了一個多小時,因無法傳上圖示 (網頁圖片、附件均無法正常使用) 讓你分享,
故直接貼上程式碼,你再自行貼入你的 Module1 內,內容如下:
P.S. 你設定的五秒鐘寫入一筆資料,好像是在趕市集似的,看得我老人家眼發瞭亂的,
我先將它改成一分鐘執行一次,你也可以使用 20 秒一筆做為參考 (較客觀)。- Sub GetDDE()
- Dim T As Date, Sh(1 To 2), i As Long, Rng As Range
-
- T = Now ' 取得現在時間
- Set Sh(1) = ThisWorkbook.Sheets(1)
- Set Sh(2) = ThisWorkbook.Sheets(2)
-
- If Not IsError(Sh(1).[B2]) Then
- Set Rng = Sh(2).[A65536].End(xlUp).Offset(1) ' 物件
- Rng.Resize(, 7) = Sh(1).[A2:G2].Value ' 將工作表1的DDE資料寫入工作表2
- With Sh(2)
- i = Rng.Row
-
- Rng.Offset(, 7) = Rng.Offset(, 3) - Rng.Offset(, 2) ' H欗的公式=>D欗-C欗
- Rng.Offset(, 8) = Rng.Offset(, 7) - Rng.Offset(, 7).Offset(-1) ' I413=H413-H412......數列2
- Rng.Offset(, 9) = Rng.Offset(, 4) ' J欗的公式=E欗
- ' xMax = Application.Max(.[I:J]) ' 最大值
- ' xMin = Application.Min(.[I:J]) ' 最小值
- ' ** .Parent.ChartObjects(1): 物件 (工作表的第1個圖表) *****
- With .ChartObjects(1).Chart
- .SeriesCollection(1).Values = .Parent.Parent.Range("I2:I" & i) ' 指定數列資料的範圍
- .SeriesCollection(1).ChartType = 52 ' 指定數列圖表類型
- .SeriesCollection(2).Values = .Parent.Parent.Range("J2:J" & i)
- .SeriesCollection(2).ChartType = 65
- If .SeriesCollection(2).AxisGroup <> xlSecondary Then .SeriesCollection(2).AxisGroup = xlSecondary
- ' 數列不在第 2 Y座標軸(副座標): 數列指定到第 2 Y座標軸(副座標) ' .AxisGroup = 2 -> 副座標
-
- .Parent.Top = .Parent.Parent.Range("L" & IIf(i <= 39, 1, i - 38)).Top ' 指定圖表頂端的位置
- With .Axes(xlValue) ' Y (主) 座標軸
- .MinimumScale = Application.Min(.Parent.Parent.Parent.[I:I]) ' 最小值
- .MaximumScale = Application.Max(.Parent.Parent.Parent.[I:I]) ' 最大值
- .MajorUnitIsAuto = True ' 主要刻度間距=自動設定
- .MinorUnitIsAuto = True ' 次要刻度間距=自動設定
- .Crosses = xlAutomatic ' 座標軸與其他座標軸交叉的點=自動設定
- .ScaleType = xlLinear ' 數值座標軸的刻度類型=xlLinear
- End With
-
- With .Axes(xlValue, xlSecondary) ' Y (副) 座標軸
- .MinimumScale = Application.Min(.Parent.Parent.Parent.[J:J]) ' 最小值
- .MaximumScale = Application.Max(.Parent.Parent.Parent.[J:J]) ' 最大值
- .MaximumScaleIsAuto = True
- .MajorUnitIsAuto = True
- .MinorUnitIsAuto = True
- .Crosses = xlAutomatic
- .ScaleType = xlLinear
- End With
- End With
- End With
- End If
-
- Application.ScreenUpdating = True
- Application.OnTime T + TimeValue("00:01:00"), "GetDDE" ' 間隔 5 分鐘改成 TimeValue("00:05:00")
- End Sub
複製代碼 |
|