返回列表 上一主題 發帖

變動紀錄的程式

變動紀錄的程式

請教一下版上大大,如果要寫一個價格變動就記錄的程式要如何寫??
A2=時間、B2=價格
一開始先將A2跟B2寫在A3和B3,然後對比B3跟B2的值,如果不相等就將A2、B2的值寫在A4、B4,一直往下寫,像這樣的程式要如何寫呢??

如果可以還請版上大大寫個範例讓我參考,感謝

寫法就和大大的這篇 http://forum.twbts.com/thread-16677-1-1.html  一樣

只是你裡面有一段寫錯

(Range("B" & WR - 1) <> Range("B2")) Then '總量有異動時才記錄

(Range("B" & (WR - 1)) <> Range("B2")) Then

TOP

呃,  我搞烏龍了
這樣才對

Sub RecordPrice()
Dim WR As Long
Dim I As Byte


If Range("D2") < 1 Then Exit Sub

Excel.Application.EnableEvents = 0


WR = Range("A1").End(xlDown).Row + 1
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Range("B" & WR - 1) <> Range("B2")) Then '總量有異動時才記錄
    For I = 1 To 3
    Cells(WR, I) = Cells(2, I)
    Next
End If


Excel.Application.EnableEvents = 1


'For I = 1 To 10
'   Cells(WR, I) = Cells(2, I)
'Next 'I
End Sub

TOP

回復 3# jackyq


大大你好厲害,另外再請教你一個問題,如果目前是將A2-C2的資料往下寫,改成把資料放在C2-E2然後往下寫要怎麼改程式碼??
就是將圖一改成圖二,上圖不是改好的,是我用拉的

TOP

不不, 我不厲害, 這個其他大大都知道, 他們忙而已


Sub RecordPrice()
Dim WR As Long
Dim I As Byte

Excel.Application.EnableEvents = 0

Dim DDE_總量 As Range
Set DDE_總量 = Range("D2")
   
If IsError(DDE_總量.Value) Then Exit Sub
If DDE_總量.Value <= 0 Then Exit Sub

WR = DDE_總量.CurrentRegion.Row + DDE_總量.CurrentRegion.Rows.Count
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Cells(WR - 1, DDE_總量.Column) <> DDE_總量.Value) Then       '總量有異動時才記錄
    Cells(WR, DDE_總量.Column).Offset(, -1).Resize(, 3).Value = _
                      DDE_總量.Offset(, -1).Resize(, 3).Value
End If

Excel.Application.EnableEvents = 1
End Sub

TOP

本帖最後由 藍天麗池 於 2016-3-22 08:43 編輯

回復 5# jackyq

J大,裡面的(DDE_總量),是要用甚麼替換嗎,我看不太懂是甚麼意思??
可以幫我說明一下嗎??
我原附件裡面沒有這個東西,感謝你喔

測試後沒有動作

TOP

本帖最後由 jackyq 於 2016-3-22 08:41 編輯

因為你說你要換位置ㄚ
原本總量的 DDE 在  B2 那就寫成 Set DDE_總量 = Range("B2")
如果總量的 DDE 搬到  D2 那就寫成 Set DDE_總量 = Range("D2")
其他的都不用改
如果堅持用原先那個
每次換位置就要修改不少地方


Sub RecordPrice()
Dim WR As Long
Dim I As Byte


If Range("F2") < 1 Then Exit Sub

Excel.Application.EnableEvents = 0

WR = Range("C1").End(xlDown).Row + 1
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Range("D" & WR - 1) <> Range("D2")) Then '總量有異動時才記錄
    For I = 3 To 5
    Cells(WR, I) = Cells(2, I)
    Next
End If


Excel.Application.EnableEvents = 1

'For I = 1 To 10
'   Cells(WR, I) = Cells(2, I)
'Next 'I
End Sub

TOP

本帖最後由 藍天麗池 於 2016-3-22 09:05 編輯

回復 7# jackyq
C大我了解了,感謝妳我試試看
可是用你的版本我測試是沒有動作的

TOP

哪個版本? ..............

TOP

回復 9# jackyq

這個,我甚麼都沒改
    Sub RecordPrice()
Dim WR As Long
Dim I As Byte

Excel.Application.EnableEvents = 0

Dim DDE_總量 As Range
Set DDE_總量 = Range("D2")
   
If IsError(DDE_總量.Value) Then Exit Sub
If DDE_總量.Value <= 0 Then Exit Sub

WR = DDE_總量.CurrentRegion.Row + DDE_總量.CurrentRegion.Rows.Count
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Cells(WR - 1, DDE_總量.Column) <> DDE_總量.Value) Then       '總量有異動時才記錄
    Cells(WR, DDE_總量.Column).Offset(, -1).Resize(, 3).Value = _
                      DDE_總量.Offset(, -1).Resize(, 3).Value
End If

Excel.Application.EnableEvents = 1
End Sub

TOP

        靜思自在 : 一句溫暖的話,就像往別人身上灑香水,自己會沾到兩三滴。
返回列表 上一主題