2016-05-31 39 views
0

我有以下代碼,登錄紙張的變化:要顯示其中的值已經改變了的細胞,也表現出存在於改變細胞之前的值

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim strAddress As String 
    Dim val 
    Dim dtmTime As Date 
    Dim Rw As Long 
    Dim x As String 

    Sheets("Shipment").Select 

    If Intersect(Target, Range("D3:D200,K3:K200")) Is Nothing Then Exit Sub 

    dtmTime = Now() 
    val = Target.Value 
    strAddress = Target.Address 
    x = Cells(2, Target.Column).Value 

    Rw = Sheets("Log Sheet").Range("A" & Rows.Count).End(xlUp).Row + 1 
    With Sheets("Log Sheet") 
     .Cells(Rw, 1) = strAddress 
     .Cells(Rw, 2) = val 
     .Cells(Rw, 3) = dtmTime 
     .Cells(Rw, 4) = x 
    End With 
End Sub 

這隻能說明我的新值,我也想看到細胞的舊價值。那是我需要幫助的地方。如果有人可以告訴我如何合併一列以顯示更改的單元格的舊值。

回答

0

首先,複製列d,並在列DD

粘貼,然後複製下面的代碼

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim strAddress As String 
    Dim val 
    Dim dtmTime As Date 
    Dim Rw As Long 
    Dim x As String 

    Sheets("Shipment").Select 

    If Intersect(Target, Range("D3:D200,K3:K200")) Is Nothing Then Exit Sub 

    dtmTime = Now() 
    val = Target.Value 
    Old_val = Sheets("Shipment").Range("DD" & Target.Row) 
    strAddress = Target.Address 
    x = Cells(2, Target.Column).Value 

    Rw = Sheets("Log Sheet").Range("A" & Rows.Count).End(xlUp).Row + 1 
    With Sheets("Log Sheet") 
     .Cells(Rw, 1) = strAddress 
     .Cells(Rw, 2) = val 
     .Cells(Rw, 3) = Old_val 
     .Cells(Rw, 4) = dtmTime() 
     .Cells(Rw, 5) = x 
    End With 
    Sheets("Shipment").Range("DD" & Target.Row) = Target.Value 
End Sub 

enter image description here

希望這是你想要的。 :)

+0

例如,如果單元格G6的值從「1」變爲「2」。 目前,它顯示列1中的g6和列2顯示2,我想顯示舊值(在本例中爲「1」)的第三列。謝謝 – Vigmo10

+0

據我所知,唯一的辦法是將更改後的值分配給不同的單元格,然後每當更改工作表時更改不同單元格中的值。所以在改變之前的第一個值就是「」等等...... – MutjayLee

+0

我怎樣才能將它結合到這個代碼?或者這是不可能的? 對不起,我不是最好的vba因此問題。謝謝:) – Vigmo10

0

一個完整的解決方案將涉及創建您的「貨運」工作表的副本,以使用以前的值的基準。以下是如何設置它:

  1. 創建「Shipment」工作表的副本,並將其重命名爲「Shipment-OldValues」。 (或者,您可以將此表單隱藏給用戶。)
  2. 確保刪除與此副本直接關聯的所有VBA代碼。 (您不希望此事件發生Worksheet_Change事件。)
  3. 在「Shipment」工作表的Worksheet_Change事件代碼中,當您確定已更改的目標單元格時,可以輕鬆地從「 Shipment-OldValues「工作表。
  4. 在「日誌表」中記錄值更改並添加另一列以記錄該單元格的先前值。
  5. 確保將已更改單元格的新值存儲在「Shipment-OldValues」工作表中以便進行下一次更改。
  6. 如果您需要對相同單元格進行多次編輯後退,則所有以前的值將在您的「日誌表」中記錄下來,並且只要您的日誌記錄完成,您就可以追蹤它。

我自己的建議是保持「Shipment-OldValues」工作表隱藏,因爲它會減少任何用戶的困惑。

+0

我已經嘗試添加另一個工作表,但確實有效,但我不希望添加另一個工作表,即使它隱藏起來也是爲了避免對其他用戶造成混淆。感謝您的解決方案!我很感激! – Vigmo10