Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Automatický čas - excel

Vedu si tabulku se záznamy a potřeboval bych vědět, kdy jsem který záznam vytvořil, vymyslel sem tudíž "vzoreček", který sem dal do A1:

=KDYŽ(B1="";"";NYNÍ())

a ten rozkopíroval do celého sloupce. Problém je, že když udělám změnu v kterémkoliv políčku sloupce B, tak mi změní datum a čas ve všech políčkách sloupce A, já bych potřeboval, aby předešlé záznamy neměnil.

Jde to nějak vyřešit?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak sem si to přečet ještě jednou a pořádně. Hodnoty vkládáš do sloupce B a do sloupce A chceš datum…
Siki83 01.08.2012 13:46
Siki83
Tohle je šikovná funkce pro sledování editace! Pro časové razítko (ve sloupci A) v případě změny ve…
L-Core 01.08.2012 14:00
L-Core
Trochu robustnejšie: Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrorHandler… poslední
los 01.08.2012 22:10
los

Tak sem si to přečet ještě jednou a pořádně. Hodnoty vkládáš do sloupce B a do sloupce A chceš datum změny

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = "2" Then
      With Cells(Target.Row, Target.Column - 1)
        .Value = Now
        .EntireColumn.AutoFit
      End With
    End If
End Sub

Tohle je šikovná funkce pro sledování editace!

Pro časové razítko (ve sloupci A) v případě změny ve sloupcích B až D to pak je (neoptimalizováno :-/) takhle:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = "2" Then
      With Cells(Target.Row, Target.Column - 1)
        .Value = Now
        .EntireColumn.AutoFit
      End With
    End If
    If Target.Column = "3" Then
      With Cells(Target.Row, Target.Column - 2)
        .Value = Now
        .EntireColumn.AutoFit
      End With
    End If
    If Target.Column = "4" Then
      With Cells(Target.Row, Target.Column - 3)
        .Value = Now
        .EntireColumn.AutoFit
      End With
    End If
End Sub

Jak to provést obecně (a optimalizovaně) pro celý list? Aby jakákoliv změna kdekoliv ve sloupcích B až IV byla zaznamenána ve sloupci A.

Díky.

Trochu robustnejšie:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrorHandler
    Application.EnableEvents = False
    
    Dim aRow As Range
    
    For Each aRow In Target.Rows
        aRow.EntireRow.Cells(1, 1).Value = Now
    Next
    
ErrorHandler:
    Application.EnableEvents = True
End Sub

Zpět do poradny Odpovědět na původní otázku Nahoru