- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 176
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-7-20
               
|
回復 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 |
|