[英]Excel VBA - Insert Username ONLY when cell is changed
這是我的問題:當用戶在一行中的任何位置進行更改時,我都有有效的代碼可以插入用戶名和時間戳。 大! 這樣我的代碼就可以工作了,我回答了自己的問題,對嗎? 不! 有一個很小的問題,盡管它不會破壞代碼,但確實導致用戶輸入用戶名,而未進行更改則進行了更改。
這是我的代碼:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ThisRow = Target.Row
'protect Header row from any changes
If (ThisRow = 1) Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Header Row is Protected."
Exit Sub
End If
For i = 1 To 61
If Target.Column = i Then
' time stamp corresponding to cell's last update
Range("BK" & ThisRow).Value = Now
' Windows level UserName | Application level UserName
Range("BJ" & ThisRow).Value = Environ("username")
Range("BJ:BK").EntireColumn.AutoFit
End If
Next i
End Sub
它是這樣發生的:用戶決定要更改單元格,因此他們雙擊該單元格。 現在,如果他們按下轉義鍵,則什么也不會發生,並且一切都是笨拙的。 但是,如果他們雙擊該單元格,然后在該單元格之外單擊到另一個單元格以離開該單元格,則即使沒有進行任何更改並且用戶的用戶名已放入第62列,系統也會將其記錄為更改。這不是bueno ,因為如果某個人被錯誤地放為最后一行更改該行中的某些內容,則可能會對另一個人犯的錯誤負責。
相反,在由用戶更改的單元格中創建注釋可能是值得的,但是我認為雙擊單元格會遇到相同的問題,因此我仍然必須考慮它。
思考?
編輯:完全公開,我在其他地方找到了此代碼,並對其進行了修改以適應我的目的。
您可以測試一下舊值和新值是否相同。 我寬松地使用“ new”,意思是擅長編輯單元格,因此就Worksheet_Change
事件的理解而言,它是“ new”值。
我也擺脫了您的For
循環,因為這似乎非常不必要。 如果我弄錯了,我深表歉意。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim ThisRow As Long ' make sure to declare all the variables and appropiate types
ThisRow = Target.Row
'protect Header row from any changes
If (ThisRow = 1) Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Header Row is Protected."
Exit Sub
End If
If Target.Column >= 1 And Target.Column <= 61 Then
Dim sOld As String, sNew As String
sNew = Target.Value 'capture new value
With Application
.EnableEvents = False
.Undo
End With
sOld = Target.Value 'capture old value
Target.Value = sNew 'reset new value
If sOld <> sNew Then
' time stamp corresponding to cell's last update
Range("BK" & ThisRow).Value = Now
' Windows level UserName | Application level UserName
Range("BJ" & ThisRow).Value = Environ("username")
Range("BJ:BK").EntireColumn.AutoFit
End If
Application.EnableEvents = True
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.