2017-09-29 41 views
0

我一直在做一點研究,如果它可能突出顯示手動修改過的單元格(通過輸入信息)反對通過marco。我真的碰到了這可能不是在這種情況下突出顯示單元格手動修改而不是通過宏完成。

方案

我有每次運行宏某些細胞被雙點擊應用跟蹤變化。當一個單元格被雙擊時,會提供一個時間戳,這非常好。

問題

我想aviod的情況是用戶試圖手工修改時間戳,或任何在該小區的相關信息。我正在嘗試使用鎖定單元格的方法進行更新。

即將實現的解決方案。

如果某個單元格已被用戶手動更新,它可能會突出顯示。但是,如果它已經通過使用宏更新確定。

代碼

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    Application.EnableEvents = False 

    With Target 
     If .Column = 4 Then 
      Select Case .Row 
       Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 

        .Value2 = "Prepared By" & " " & Environ("Username") 
        .Value2 = .Value2 & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 

        End Select 
        End If 
    End With 
+0

爲什麼不保護這些細胞? – FunThomas

+0

也許使用一個公共布爾變量作爲一個標誌,宏將調整,但手動調整不會。該事件可以檢查此標誌並採取不同的行動。 – Zerk

+0

@FunThomas我不使用保護單元,因爲它鎖定了我在頁面上的簽名行 – James

回答

0

這個最簡單的解決只是爲了執行與變化事件,將所選單元格的任何變化。我認爲雙擊方面是爲了使其對輸入更加用戶友好,所以我們不會刪除它,而是複製它:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
With Target 
    If .Column = 4 Then 
     Select Case .Row 
      Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 
       .Value2 = "Prepared By" & " " & Environ("Username") & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 
     End Select 
    End If 
End With 
End Sub 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 
If Target.Cells.Count = 1 Then 
    With Target 
     If .Column = 4 Then 
      Select Case .Row 
       Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 
        .Value2 = "Prepared By" & " " & Environ("Username") & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 
      End Select 
     End If 
    End With 
Else 
    For Each cell In Target.Cells 
    With cell 
     If .Column = 4 Then 
      Select Case .Row 
       Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 
        .Value2 = "Prepared By" & " " & Environ("Username") & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 
      End Select 
     End If 
    End With 
    Next cell 
End If 
End Sub 
相關問題