回復 4#ko310kmo
Dim ar '宣告一個靜態陣列變數
Private Sub Worksheet_Calculate()
If IsEmpty(ar) Then ar = [B2:D13]: Exit Sub
如果是空值ar = [B2:D13],否則就結束sub的意思嗎? '如果這個靜態陣列還沒建立,表示開啟檔案後第一次重算時,所以不必做任何比較就退出程序
Set rng = [B2:D13] 是設成陣列的意思嗎? rng是range的意思嗎? 還是是代號而已?] '這個rng變數是個Range型態的變數,就是指向你DDE公式所在的範圍
For I = 1 To UBound(ar, 1) '當靜態陣列有被寫入元素的值才會進到此循環
If ar(I, 2) & ar(I, 3) <> rng(I, 2) & rng(I, 3) Then '比較陣列跟範圍的值是否一樣
為什麼會知道ar、rng是變動前後的陣列?
因為ar是程序最後把rng的值反過來設給ar,所以ar就變成前一次rng的值
With Sheets(CStr(ar(I, 1)))
Set a = .[H65536].End(xlUp).Offset(1)
所屬工作表的h欄最後一筆有資料的欄位的下一列。 是這意思對吧!! 但它的下一行不是空白嗎?
'是資料尾的下一列空白沒錯,你不是要把這些紀錄寫到對應的工作表內嗎?
a = rng(I, 1): a.Offset(, 1) = rng(I, 2): a.Offset(, 3) = rng(I, 3)
End With
End If
Next
ar = rng '將rng的值設給ar ,做下一次重算的比對基礎
End Sub作者: ko310kmo 時間: 2011-5-12 01:26
A = Application.Transpose(Range("C2", Range("D2").End(xlDown)).Value) '即時成交價與成單量範圍陣列
If TheTime <> TimeSerial(Hour(Time), Minute(Time), 0) Then '設定每分鐘整
ReDim AR(2 To Range("b2").End(xlDown).Row, 1 To 6)
Ex
TheTime = TimeSerial(Hour(Time), Minute(Time), 0)
Else
Ex
End If 不太懂的這段的意思
If IsEmpty(B) Then '比對陣列為資料
For Each E In Range("b2", Range("b2").End(xlDown))
With Sheets(E.Text).Cells(Rows.Count, "j").End(xlUp)
.Offset(1) = E(1, 2) '記錄下 成交價
.Offset(1, 1) = E(1, 3) '記錄下 單量
.Offset(1, 3).Resize(1, 6) = Application.Index(AR, E.Row - 1) '讀取一分鐘內的資料
為什麼要讀取一分鐘的資料?
End With
Next
Else
For i = 1 To UBound(A, 2)
If A(1, i) <> B(1, i) Or A(2, i) <> B(2, i) Then ' 履約價的(成交價或成單量)有變動
With Sheets([B2].Cells(i, 1).Text).Cells(Rows.Count, "j").End(xlUp)
請問[B2]是什麼意思,本來以為是Range("B2"),但感覺好像有不對...
回復 14#ko310kmo
如果我是先執行test1再執行test2,沒有設定test3,這樣分鐘資料只會更新第一遍。
不要用test3了
test2 最後加上
If Time <= #1:30:00 PM# Then Application.OnTime Now + TimeValue("00:01:00"), "test2"
End Sub作者: ko310kmo 時間: 2011-5-12 22:28
請問大大
If Minute(Time) = Minute(t) Then
Do While Minute(Time) = Minute(t)
這二行的意思是
一直做到這一分鐘過完對吧!
而我們後面又寫Application.OnTime Now + TimeValue("00:01:00"), "test2"
所以會不會是因為這樣,才會造成二分鐘記錄一次呢?
我在想是不是,不用加Application.OnTime
而把大大原本的程式最後寫的
Loop Until Time <= #1:30:00 PM#
改成
Loop Until Time >= #1:30:00 PM#
loop until time<=1:30
做到時間小於1點30就跳出,測試的時間一定都是小於1:30的,所以才跳跑一遍而已,就跳出
If IsEmpty(B) Then '比對陣列為資料
For Each E In Range("b2", Range("b2").End(xlDown))
With Sheets(E.Text).Cells(Rows.Count, "j").End(xlUp)
.Offset(1) = E(1, 2) '記錄 成交價
.Offset(1, 1) = E(1, 3) '記錄 單量
.Offset(1, 2) = Time '記錄 成交時間
End With
Next
E(1, 2)這寫法是什麼意思?
Else
For i = 1 To UBound(A, 2)
If A(1, i) <> B(1, i) Or A(2, i) <> B(2, i) Or A(3, i) <> B(3, i) Then ' 履約價的(成交價或成單量)有變動
With Sheets([B2].Cells(i, 1).Text).Cells(Rows.Count, "j").End(xlUp)
.Offset(1) = [B2].Cells(i, 2) '記錄下 即時成交價
.Offset(1, 1) = [B2].Cells(i, 3) '記錄下 單量
.Offset(1, 2) = Time
End With
End If
Next
End If
[B2].Cells(i, 3)
雖然看了大大貼的網址的教學
所以是 range("B2").cells(i,3) 的意思嗎?
看了好久,還是不太了解
請大大解釋一下,謝謝!!! 作者: GBKEE 時間: 2011-5-17 18:59