2012-10-28 63 views
0

我想知道是否有人能夠幫助我。跟蹤Excel工作表變更

我使用下面的代碼來跟蹤對Excel工作表的更改,當範圍B5中的任何單元格的值自動插入'A'列並將'No'字插入'AE'列時, Q2000已更改。

Option Explicit 
    Public preValue As Variant 
    Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim Cell As Range, res As Variant 
     If Target.Cells.Count > 1 Then Exit Sub 
     On Error Resume Next 
     If Not Intersect(Target, Range("B5:Q2000")) Is Nothing Then 
     If Target.Value <> preValue And Target.Value <> "" Then 
      Application.EnableEvents = False 
      Range("A5:A" & Target.Row).Value = Date 
      Range("AE5:AE" & Target.Row).Value = "No" 
      Application.EnableEvents = True 
      Target.ClearComments 
      ' Target.AddComment.Text Text:="Previous Value was " & preValue & Chr(10) & "Revised " & Format(Date, "dd-mm-yyyy") & Chr(10) & "By " & Environ("UserName") 
      Target.Interior.ColorIndex = 35 
     End If 
    End If 
    On Error GoTo 0 

    End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Target.Count = 1 Then preValue = Target.Value 
End Sub 

不幸的是,我遇到了一個問題,我不知道如何解決。

如果用戶將數據插入到單元格D5和D10中,則將日期和單詞「否」添加到這兩行的正確列(A和AE)中。

不過,不幸的是,即使用戶在這些行上沒有輸入任何其他數據,'No'值和日期也會添加到這些列之間的行,即D6-D9,而I我不確定問題出在哪裏。

我只是想知道是否有人可以看看這個,並提供一些指導我如何解決這個問題。

許多的感謝和親切的問候

回答

0

您當前的代碼將通過Target's行開始與A5AE5的變化。爲了讓代碼更改只選定單元格的行,更改此:

Range("A5:A" & Target.Row).Value = Date 
Range("AE5:AE" & Target.Row).Value = "No" 

這樣:

Range("A" & Target.Row).Value = Date 
Range("AE" & Target.Row).Value = "No" 

而且,你似乎沒有使用可變Cellres。您可能想要刪除該行代碼。

+0

嗨@Doug格蘭西,感謝您花時間回覆我的文章和解決方案。它很棒! 親切的問候 – IRHM