ここに問題があります。ユーザーが行のどこでも変更を加えたときにユーザー名とタイムスタンプを挿入する作業コードがあります。すばらしいです!だから、私のコードが動いて、自分の質問に答えましたよね?いいえ!コードを壊すことはありませんが、が作成されていないときにユーザー名の入力を変更したユーザーにつながる小さな問題はです。ここではそれが起こる方法ですExcel VBA - セルが変更されたときにのみユーザー名を挿入
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
:
は、ここに私のコードだユーザーは、彼らがセルに変更を加えることを決定したいので、彼らは、セルをダブルクリックします。今、彼らがエスケープキーを押すと、何も起こりません、すべてが大胆なdoryです。しかし、もし彼らがセルをダブルクリックして、へのセルの外にあるセルをクリックすると、のセルが残っていれば、システムは変更を加えずにユーザーのユーザー名を列62に入れても変更を記録します。誰もその行の何かを変更する最後の人として間違って置かれている場合、別の個人が作った間違いの責任を誰かが負う可能性があります。
逆に、ユーザーによって変更されたセルにコメントを作成する価値はあるかもしれませんが、セルをダブルクリックすると同じ問題が発生すると思いますので、それ。
思考?
編集:完全な開示、私はこのコードを他の場所で見つけ、自分の目的に合わせました。
ブリリアント。ありがとう。私はあなたがここで何をしているのかを見ていると思う。新しい値をsNewにコピーしてから、変更のアクションを元に戻し、古い値をsOldにコピーして比較します。 「元に戻す」は、「Application.EnableEvents = False」のために発生しません。私は正しいですか? – jtrousd
@jtrousd - 実際の取り消し*は実行されますが、この 'Target.Value = sNew'で元に戻す前に値を設定します。 'EnableEvents = False'は、シートが変更されるたびにマクロが起動するのを止めます。 –
Aha。私は今参照してください!ありがとう、スコット。 – jtrousd