Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Datum einfrieren bei Eintrag in andere Zelle

Betrifft: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 12.03.2016 00:18:57

Hallo zusammen,

ich will in Zelle A1 immer das aktuelle Datum haben. Habe dazu in A1 die Formel HEUTE(). Jetzt will ich, wenn der Eintrag "X" in B1 gemacht wird, das Datum fixieren. Wenn ich in B1 das "X" wieder entferne, soll in A1 wieder das aktuelle Datum also HEUTE() erscheinen.

Hierbei geht es um eine Anwesenheitsliste. Also jedesmal wenn einer nicht da ist mach ich B1 ein "X", das Datum wird fix und wenn er wieder kommt entferne ich das "X" aus B1 und das aktuelle Datum ist wieder da.

Hab das ganze schon über Formel probiert bekomme aber immer Probleme mit Zirkelbezügen.
VBA hab ich keine Ahnung.

Danke für eure Hilfe

Gruß
Andy

  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: MatthiasG
Geschrieben am: 12.03.2016 01:38:41

Hallo Andy,

Rechtklick auf Register "Tabelle1" (oder entsprechender Tabellenblattname unten), dann "Code anzeigen" klicken, dann diesen Code rein:

Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing Then
    If Range("B1") = "" Then
        Range("A1").Formula = "=TODAY()"
    ElseIf UCase(Range("B1")) = "X" Then
        Range("A1").Value = Date
    Else
        MsgBox "In B1 darf nur X oder Nichts stehen"
        With Application
            .EnableEvents = False
            .Undo
            .EnableEvents = True
        End With
    End If
End If
End Sub

Gruß Matthias


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 12.03.2016 02:07:52

Danke Matthias

werd ich am WE probieren.

Gruß

Andy


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 12.03.2016 14:11:02

Geht der Code für mehrere Zeilen?
Oder muss ich den Code anpassen in "A1:A20" und "B1:B20"?

funktioniertdas so?

Gruss
Andy


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 12.03.2016 20:12:57

Hallo

der Code funzt aber nur bei Zelle A1 und B1. Ich habe aber eine Tabelle.
Dann sollte es für A1 bis A20 und B1 bis B20 funzen.

Gruß

Andy


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: MatthiasG
Geschrieben am: 13.03.2016 12:10:56

Hallo Andy,

sorry, hatte Dienst...

folgenden Code mal probieren:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim z As Range, z0 As Range
Set z = Intersect(Target, Range("B1:B20"))
If Not z Is Nothing Then
    For Each z0 In z
        If z0 = "" Then
            z0.Offset(0, -1).Formula = "=TODAY()"
        ElseIf UCase(z0) = "X" Then
            z0.Offset(0, -1).Value = Date
        End If
    Next z0
End If
End Sub

Die Fehlerprüfung hab ich rausgenommen, da innerhalb einer Schleife schlecht ein Undo() verwendet werden kann. Aber du kannst die Werte in Spalte B ja mit der Datenüberprüfung einschränken, falls nötig.
Und der Code prüft natürlich nicht, ob Spalte A manuell verändert wurde.

Gruß Matthias


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 13.03.2016 13:04:17

Hallo Matthias,

habe den Code eingefügt. Sollte funzen. Jetzt muss ich den Code noch in meine Anwesenheitsliste auf Arbeit einfügen und über drei Schichten mal testen.

Danke

Andy


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 18.03.2016 22:38:00

Hallo Matthias,

habe den Code jetzt eine Woche auf Arbeit laufen lassen. Ich komme zurecht. Aber: Mein Kollege hat eine andere Idee wie wir unser Problem lösen könnten. Er will über eine Schaltfläche alles aktualisieren, d.h. wenn B1:B20="X" soll A1:A20 nicht verändert werden. Ist B1:B20 leer soll A1:A20 das aktuelle Datum rein und fixiert werden. Wie gesagt das ganze ist eine Anwesenheitsliste und wird täglich aktualisiert.

Wird bestimmt etwas komplizierter. Ist es überhaupt umsetzbar?

Danke im Voraus
Andy

https://www.herber.de/bbs/user/104460.xlsx


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: MatthiasG
Geschrieben am: 19.03.2016 12:42:46

Hallo Andy,

Klar ist das umsetzbar; das ist auch nicht komplizierter, als das ganze per Ereignisprozedur zu aktualisieren.

Wenn Bx leer ist, soll in Ax das aktelle Datum rein; soweit habe ich das verstanden.

Und wenn Bx nicht leer ist?
Soll dann nichts gemacht werden, oder soll in Ax die Formel "=HEUTE()" rein?

Und: Wie wird eigentlich sichergestellt, dass die Makros in der Mappe aktiviert werden?

Gruß Matthias


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 19.03.2016 14:36:42

Hallo Matthias,

Wenn Bx leer aktuelles Datum, aber nicht die Formal "=HEUTE()", z.B. aus Zelle angenommen D1 wo die Formel steht übernehmen. Wenn Bx nicht leer ist also"=X" soll nichts gemacht werden. Das Datum was in Ax steht soll bleiben.

Mal kurz erklärt was ich machen will: Am Freitag mache ich meine Eintragungen. Mitarbeiter (MA) anwesend lasse ich Bx leer (wenn in Bx =X entferne ich das X). in Ax soll das Datum von Freitag. MA abwesend mache ich in Bx ein "X". Datum in Ax fixieren. Das ganze dann mit der Schaltfläche "Aktualisieren".
Am Montag öffne ich die Tabelle wieder. Die Eintragungen sollen dann noch so sein wie am Freitag. Ich mache wiedr meine "X" wer da ist und dann das ganze mit der Schaltfläche "Aktualisieren". Das ganze Tag um Tag.

Die Makros aktiviere ich in den Excel-Optionen.

gruß

Andy


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: MatthiasG
Geschrieben am: 20.03.2016 12:01:26

Hallo Andy,

den Code in ein normales Modul (nicht ins Modul des Tabellenblattes), dann die Schaltfläche dem Makro zuordnen.
Ein Fehler könnte noch in der Erkennung der verwendeten Zeilen bestehen.
Ich verwende hier .UsedRange, das arbeitet aber nicht immer zuverlässig.

Option Explicit

Sub Aktualisieren()
Dim z As Range, z0 As Range, sh As Worksheet
Set sh = Sheets("Tabelle1") 'Namen anpassen!
Set z = Intersect(sh.UsedRange, sh.Range("A:A")).Offset(0, 1)

'MsgBox z.Address
For Each z0 In z
    If Trim(z0) = "" Then 'Trim(), dann werden auch Leerzeichen werden als leere Zelle  _
interpretiert
        z0.Offset(0, -1).Value = Date
    ' folgende 2 Zeilen auskommentiert: Nichts machen, wenn 'X' in Zelle
    'ElseIf UCase(z0) = "X" Then
    '    z0.Offset(0, -1).Value = Date
    End If
Next z0

End Sub

Gruß Matthias


  

Betrifft: AW: Datum einfrieren bei Eintrag in andere Zelle von: Andreas Scharf
Geschrieben am: 21.03.2016 00:25:23

Hallo Matthias,

ich füge den Code morgen auf Arbeit ein. in meiner "test-Datei" hat es gefunzt.

Danke

Andy


 

Beiträge aus den Excel-Beispielen zum Thema "Datum einfrieren bei Eintrag in andere Zelle"