Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datum von Heute mit CDate(Now)

Forumthread: Datum von Heute mit CDate(Now)

Datum von Heute mit CDate(Now)
Heute
Hallo Leute
Ich möchte,wenn in Spalte E oder F ein "x" eingetragen wird,das in Spalte A das Datum von heute eingetragen wird,und in Spalte B die aktuelle Uhrzeit.
Angefangen sollte ab Zelle 5 werden bis zum Schluß der Exeltabelle.
Dabei sollte es egal sein ob "x" klein oder groß geschrieben wird.
Eine Deluxe Lösung wäre,wenn schon ein "x" in E oder F eingetragen wurde,und dies im nachhinein gelöscht wird. MsgBox"Soll das "x" gelöscht werden.
Komme dabei nicht klar.
Könnte mir bitte dabei bitte jemand weiterhelfen ?
Danke Heinz
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Sheets("Sortierrapport").Range("A5:A5000").FormulaR1C1 = "=IF(OR(RC[4]=""x"",RC[5]=""x""), NOW( _
),"""")"
End Sub

Anzeige
AW: Datum von Heute mit CDate(Now)
25.01.2011 18:45:07
Heute
Hallo Heinz,
so ad hoc würde ich ein Makro an das Tabellenblatt heften, das ausgeführt wird, wenn das Blatt activiert wird:
Private Sub Worksheet_Activate()
For zeile = 5 To Rows.Count
If Cells(zeile, 5) = "X" Or Cells(zeile, 6) = "X" Or _
Cells(zeile, 5) = "x" Or Cells(zeile, 6) = "x" Then
Range("A" & zeile) = Format(Int(Now()), "dd.mm.yyyy")
Range("B" & zeile) = Format(Now() - Int(Now()), "hh:mm")
End If
Next
End Sub
Ich denke, das sollte die Standard-Ausführung (also nicht Deluxe) sein.
good luck
praetorius
PS: Für die Deluxe-Version lass ich die Frage mal offen.
Anzeige
AW: Datum von Heute mit CDate(Now)
25.01.2011 18:50:56
Heute
Hallo Heinz,
kopiere den Code ins Modul der Tabelle:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrExit
If Not Intersect(Target, Range("E5:F" & Rows.Count)) Is Nothing Then
Application.EnableEvents = False
If UCase(Target(1)) = "X" Then
Cells(Target.Row, 1) = Date
Cells(Target.Row, 2) = Format(Now, "hh:mm:ss")
ElseIf Target(1) = "" Then
If MsgBox("Soll das 'X' gelöscht werden ?", vbYesNo + vbExclamation, "Löschen X") =  _
vbYes Then
Target = "": Cells(Target.Row, 1) = "": Cells(Target.Row, 2) = ""
Else
Application.Undo
End If
End If
End If
ErrExit:
Application.EnableEvents = True
End Sub

Grüße
Steffen
Anzeige
AW: Danke
26.01.2011 10:16:36
Heinz
Danke an Praetorius & Steffen
Ich möchte mich recht herzlich für Eure Exellente Hilfe bedanken.
Echt S U P E R !!
Nochmals Danke
Heinz
AW: Noch eine kleine Verbesserung
27.01.2011 12:56:27
Heinz
Hallo Praetorius & Steffen
Der Code funktioniert Super
Nur bin ich draufgekommen das zum Beispiel 2 "x" in E7 & F7 nicht sein dürfen.
Entweder in Zelle E7 oder in F7.
Könntet ihr mir dazu bitte nochmals weiterhelfen?
Gruß
Heinz
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrExit
If Not Intersect(Target, Range("E5:F" & Rows.Count)) Is Nothing Then
Application.EnableEvents = False
If UCase(Target(1)) = "X" Then
Cells(Target.Row, 1) = Date
Cells(Target.Row, 2) = Format(Now, "hh:mm:ss")
ElseIf Target(1) = "" Then
If MsgBox("Soll das 'X' gelöscht werden ?", vbYesNo + vbExclamation, "Löschen X") =  _
vbYes Then
Target = "": Cells(Target.Row, 1) = "": Cells(Target.Row, 2) = ""
Else
Application.Undo
End If
End If
End If
ErrExit:
Application.EnableEvents = True
End Sub

Anzeige
AW: Noch eine kleine Verbesserung
27.01.2011 12:57:15
Heinz
Habe vergessen auf offen zu stellen.
Heinz
AW: Noch eine kleine Verbesserung
29.01.2011 01:11:02
praetorius
Hallo Heinz,
tut mir leid, dass ich jetzt erst hier reinschaue, aber lass mal sehen.
Ich kann mir eine Lösung vorstellen, die verhindert, dass ein zweites x (in die Nachbarzelle) eingetragen wird. Aber was soll denn passieren, wenn nun schon in z.B. E7 und F7 je ein x eingetragen ist? Welches soll dann weg?
praetorius
Anzeige
AW: Noch eine kleine Verbesserung
29.01.2011 08:17:48
Heinz
Hallo praetorius
tut mir leid, dass ich jetzt erst hier reinschaue
Du musst dich absolut nicht bei mir Entschuldigen.
ICH möchte etwas von dir.
Wäre es möglich eventuell eine MsgBox aufscheinen zu lassen.
So ungefähr: Wenn schon ein Kreuz in Spalte E eingetragen wurde, und nun ein "x" in Spalte "F" hinzukommt
"Hallo in "A" wurde schon eingetragen".Soll es so bleiben ?
Wenn Ja dann das "x" in "F" eintragen und in "E" löschen.
Und umgekehrt.
Danke & Gruß
Heinz

Die Datei https://www.herber.de/bbs/user/73300.xls wurde aus Datenschutzgründen gelöscht


Anzeige
AW: Noch eine kleine Verbesserung
31.01.2011 11:29:04
praetorius
Hallo Heinz,
https://www.herber.de/bbs/user/73326.xls
damit sollte es so laufen, wie du es dir vorgestellt hast. Im Modul LOT_hinzufügen habe ich noch eine kleine Änderung vorgenommen:
Falls die Werte in N2, O2 oder P2 fehlen sollten, kann der Benutzer sie jetzt in die erscheinende InputBox eintragen und muss nicht mehr zu der entsprechenden Zelle gehen.
Schau es dir mal an; Rückmeldung wäre nett.
good luck
praetorius
Anzeige
AW: Noch eine kleine Verbesserung
31.01.2011 19:10:23
Heinz
Hallo praetorius
Du bist einfach P E R F E C T !!
Echt geil !!!
Ich danke dir recht herzlich
Gruß
Heinz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Datum von Heute mit CDate(Now) in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem Du die Datum- und Uhrzeiteinträge automatisieren möchtest.

  2. Wechsle in den VBA-Editor, indem Du ALT + F11 drückst.

  3. Füge einen neuen Modul ein, indem Du mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" klickst und "Einfügen" > "Modul" wählst.

  4. Kopiere den folgenden Code und füge ihn in das Modul ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrExit
    If Not Intersect(Target, Range("E5:F" & Rows.Count)) Is Nothing Then
       Application.EnableEvents = False
       If UCase(Target(1)) = "X" Then
           Cells(Target.Row, 1) = Date
           Cells(Target.Row, 2) = Format(Now, "hh:mm:ss")
       ElseIf Target(1) = "" Then
           If MsgBox("Soll das 'X' gelöscht werden?", vbYesNo + vbExclamation, "Löschen X") = vbYes Then
               Target = ""
               Cells(Target.Row, 1) = ""
               Cells(Target.Row, 2) = ""
           Else
               Application.Undo
           End If
       End If
    End If
    ErrExit:
       Application.EnableEvents = True
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Teste die Funktion, indem Du ein "x" in die Spalten E oder F einträgst.


Häufige Fehler und Lösungen

  • Fehler: "Der Code funktioniert nicht"

    • Stelle sicher, dass der Code im richtigen Arbeitsblatt-Modul eingefügt wurde. Du kannst dies überprüfen, indem Du im VBA-Editor den entsprechenden Arbeitsblattnamen auswählst.
  • Fehler: Datum wird nicht aktualisiert

    • Überprüfe, ob "Makros aktivieren" in den Excel-Einstellungen aktiviert ist.
  • Fehler: MsgBox erscheint nicht

    • Stelle sicher, dass die Interaktion mit den Zellen korrekt eingestellt ist und dass keine Fehler im Code vorhanden sind.

Alternative Methoden

  • Verwendung von CDate für Datumsformatierungen: Wenn Du das Datum in einem bestimmten Format benötigst, kannst Du CDate verwenden, um sicherzustellen, dass das Datum korrekt interpretiert wird:

    Cells(Target.Row, 1) = CDate(Format(Now, "dd/mm/yyyy"))
  • Automatisierung mit Application.OnTime: Du kannst auch Application.OnTime verwenden, um die Aktualisierung der Zellen zu einem bestimmten Zeitpunkt zu planen.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du den Code anpassen kannst:

  1. Datum im Format dd.mm.yyyy eintragen:

    Cells(Target.Row, 1) = Format(Date, "dd.mm.yyyy")
  2. Uhrzeit im 24-Stunden-Format:

    Cells(Target.Row, 2) = Format(Now, "hh:mm")

Diese Anpassungen können helfen, die Lesbarkeit der Daten zu verbessern.


Tipps für Profis

  • Verwendung von UCase für die Eingabeverarbeitung: Damit Du sicherstellen kannst, dass die Groß- und Kleinschreibung kein Problem darstellt, kannst Du UCase verwenden, um die Eingaben zu standardisieren.

  • Verwendung von CDate in VBA: Nutze CDate, um sicherzustellen, dass Datumsangaben korrekt in VBA interpretiert werden, besonders wenn Du mit verschiedenen Formaten arbeitest.

  • Code-Optimierung: Halte Deinen Code sauber und gut kommentiert, um die Wartbarkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich das Datum in einem anderen Format anzeigen? Du kannst das Format ändern, indem Du die Format-Funktion anpasst, zum Beispiel: Format(Date, "dd-mm-yyyy").

2. Was passiert, wenn ich mehrere "x" in einer Zeile eintrage? Der aktuelle Code erlaubt nur ein "x" pro Zeile in den Spalten E oder F. Weitere Anpassungen wären nötig, um diese Logik zu ändern.

3. Wie kann ich sicherstellen, dass nur bestimmte Benutzer das Makro ausführen können? Du kannst Benutzerrechte in Excel anpassen oder das Arbeitsblatt schützen, um zu verhindern, dass unbefugte Änderungen vorgenommen werden.

4. Ist dieser Code mit Excel 365 kompatibel? Ja, der Code ist mit Excel 365 sowie frühere Versionen kompatibel, solange Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige