'entwickelt von Winfried Radner 'e-mail: Wolf.W.Radzinski@onlinehome.de 'Benutzung frei - ohne Gewähr ###### GEÄNDERT AM 15.8.2001! Die Globale Variable erlaubt wurde Private und damit LOKAL definiert! Die Übergabe des aktuellen Variableninhalts erfolgt jetzt mittels PROPERTY GET und LET ###### 'Code für "Diese Arbeitsmappe" '============================= Private Sub Workbook_Open() erlaubt_wert = True End Sub 'Code für "Tabelle bzw Arbeitsblatt" '=================================== 'alternativ bzw. zusätzlich möglich Private Sub Worksheet_Activate() 'bei Aktivierung des Worksheets wird die 'Zeit- bzw. Datumsänderung automatisch erlaubt! 'Erlaube Zeit- bzw. Datumseinträge per 'Mausklick bzw. Wertänderung in Spalte '(hier z.B. Spalte C= Column 3) erlaubt_wert = True End Sub 'und folgender Code zwingend 'bei jedem Zellwechsel... Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If erlaubt_wert Then Setze_zeit Target, 1 If erlaubt_wert Then Setze_zeit Target, 2 End Sub 'oder bei jeder Änderung in Spalte C Private Sub Worksheet_Change(ByVal Target As Excel.Range) If erlaubt_wert Then Setze_zeit Target, 3, False, 2 If erlaubt_wert Then Setze_zeit Target, 3, False, 1 End Sub 'mache dies... 'der restliche Code muß/sollte in ein eigenes Modul '>Einfügen >Modul ... (oder in ein schon vorhandenes hineinkopieren) 'Code für "Modul" '================ Public Sub Setze_zeit(r As Range, spalte As Long, Optional testleer = True, Optional ausgabespalte = 1) 'Spaltennummer wird übergeben. Wenn testleer=False, 'dann wird nicht in aktiver Zelle, sondern in Spalte ausgabespalte '(hier z.B.A=1 und B=2) geändert, wenn die aktive Zelle in der Übergabespalte '(hier z.B. C=3) NICHT LEER war. Diese Änderung wird NUR AUFGERUFEN, 'wenn auch eine Neueingabe bzw. Änderung durchgeführt wurde 'und nicht bei jedem Zellwechsel! 'prüfe auf Spalte, sonst verlasse die Prozedur If r.Column <> spalte Then Exit Sub 'trage die Zeit (bzw.Datum) nur dann automatisch ein, 'wenn nur eine EINZIGE Zelle markiert ist! If r.Count = 1 Then Select Case testleer Case True: 'und auch nur dann, wenn die Zelle bisher LEER war 'beide if Teile NICHT mit AND verbinden! 'bei r.count>1 ist wohl r.value undefiniert--> Fehler If IsEmpty(r.Value) Then r.Value = Now() Case Else: 'bzw. das Datum nur dann, wenn die aktive Zelle NICHT leer war If Not IsEmpty(r.Value) Then r.Offset(0, ausgabespalte - spalte).Value = Now() End Select End If End Sub 'Spalte A als Datum formatieren Spalte B jetzt noch als Zeitformat hh:mm:ss 'definieren, dann in ein Feld der ersten oder zweiten Spalte springen ODER 'in der dritten Spalte einen Wert ändern bzw. neu eingeben und huch, das Datum 'und/oder die Zeit steht wie von Geisterhand eingetragen in der ersten bzw. 'zweiten Spalte (bzw. ausgabespalte(n)) 'ein Datum- bzw. Zeitwechsel in Spalte A und B ist abhängig von 'i) Sprung in ein LEERES Feld in Spalte A oder B 'ii) Änderung/Neueingabe eines Wertes in Spalte C, 'sonst bleibt Spalte A und B unverändert! 'temporäre Sperrung des setze_zeit Funktionsaufrufes 'die Funktion wird nur ausgeführt, wenn die Variable 'erlaubt den Wert True bzw. Wahr hat, die Variable wird 'beim aktivieren des Worksheets automatisch auf Wahr gesetzt! Private erlaubt As Boolean Public Sub gesperrt() 'schalte die Änderungsperre manuell ein/aus z.B. 'für Änderungen in Spalte C ohne das Datum in Spalte A 'bzw. B ebenfalls zu ändern erlaubt = Not erlaubt MsgBox "Änderungen erlaubt? = " & erlaubt End Sub Public Property Get erlaubt_wert() As Boolean erlaubt_wert = erlaubt End Property Public Property Let erlaubt_wert(ByVal x As Boolean) erlaubt = x End Property