Excel 2010 Datenüberprüfung in VBA
Hallo Leute,
ich habe ein Problem mit einer Excel-Tabelle und komme nicht weiter.
Spalte C ist mit einem Datum und die Spalte D ist mit einer Uhrzeit gefüllt.
Die Dateneingabe liegt zwischen L und BX. Zeilen von 20 bis 200.
Es soll nun jede Dateneingabe mit dem Datum und Uhrzeit aus der Zeile verglichen werden.
Liegt das Datum und die Uhrzeit in der Vergangenheit soll eine Fehlermeldung erscheinen.
Den Weg mit der Datenüberprüfung kann ich aus verschiedenen Gründen nicht gehen. Somit kommt
wohl nur VBA in Frage. Leider habe ich aber davon keine Ahnung.
Somit hoffe ich auf die Profis hier im Forum.
have a nice day...
DockM@ster
ich habe ein Problem mit einer Excel-Tabelle und komme nicht weiter.
Spalte C ist mit einem Datum und die Spalte D ist mit einer Uhrzeit gefüllt.
Die Dateneingabe liegt zwischen L und BX. Zeilen von 20 bis 200.
Es soll nun jede Dateneingabe mit dem Datum und Uhrzeit aus der Zeile verglichen werden.
Liegt das Datum und die Uhrzeit in der Vergangenheit soll eine Fehlermeldung erscheinen.
Den Weg mit der Datenüberprüfung kann ich aus verschiedenen Gründen nicht gehen. Somit kommt
wohl nur VBA in Frage. Leider habe ich aber davon keine Ahnung.
Somit hoffe ich auf die Profis hier im Forum.
have a nice day...
DockM@ster
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 224366
Url: https://administrator.de/contentid/224366
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo DockMaster-de!
Was soll denn nach der Überprüfung weiter passieren? Wenn Du zB nur feststellen und per Farbcodierung anzeigen wolltest, ob der jeweils in L20:BX200 enthaltene Timestamp zeitlich vor dem sich aus den Spalten C und D ergebenden Wert liegt, würde eine Bedingte Formatierung für die Zelle L20 mit der Formel
(lässt sich dann auch auf alle weiteren Zellen des Bereichs L20:BX200 übertragen) genügen, da ja Datum und Uhrzeit auch nur Zahlenwerte sind (Uhrzeiten sind als Bruchteile eines Tages gespeichert) ...
Grüße
bastla
Was soll denn nach der Überprüfung weiter passieren? Wenn Du zB nur feststellen und per Farbcodierung anzeigen wolltest, ob der jeweils in L20:BX200 enthaltene Timestamp zeitlich vor dem sich aus den Spalten C und D ergebenden Wert liegt, würde eine Bedingte Formatierung für die Zelle L20 mit der Formel
=L20<($C20+$D20)
Grüße
bastla
Hallo DockM@ster,
Die Formel sollte hier aber dann so lauten, wenn du es so meintest das die Daten die du im Bereich L20:BX200 eingegeben hast nicht älter sein dürfen als das aus C und D.
Wenn es unbedingt VBA sein muss, aus welchen Gründen auch immer kannst du folgenden Code in das entsprechende Sheet im VBA-Editor einfügen:
Kommentare im Code.
Grüße Uwe
Zitat von @DockMaster-de:
müsste ich jede einzelne Zelle bearbeiten und deswegen dachte ich an einen VBA Code.
wieso? du kannst den Bereich markieren und dann die Datenüberprüfung mit der Formel von Bastla über den ganzen Bereich in einem Rutsch implementieren. Die Zellbezüge in der Formel werden entsprechend angepasst, solange du die Spalten oder Reihen nicht mit einem $ in der Formel festsetzt.müsste ich jede einzelne Zelle bearbeiten und deswegen dachte ich an einen VBA Code.
Die Formel sollte hier aber dann so lauten, wenn du es so meintest das die Daten die du im Bereich L20:BX200 eingegeben hast nicht älter sein dürfen als das aus C und D.
=L20 > ($C20+$D20)
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
' Bereich der auf Änderungen überwacht werden soll
Set changeRange = Range("L20:BX200")
'Wenn die geänderte Zelle in den überwachten Bereich fällt...
If Not Application.Intersect(changeRange, Target) Is Nothing Then
' Nur ausführen wenn Zelle einen Wert enthält
If Target.Value <> "" Then
'Datum aus Spalte C und D der jeweiligen Reihe in Variablen schreiben
d1 = Cells(Target.Row, 3).Value2
d2 = Cells(Target.Row, 4).Value2
'Wenn die Eingabe in ein Datum konvertiert werden kann
If IsDate(Target.Value) Then
'Wenn eingetragener Wert kleiner als Datum aus Spalte C und D gebe Fehlermeldung aus
If CDbl(Target.Value2) < (d1 + d2) Then
MsgBox "Das eingegebene Datum liegt in der Vergangenheit!", vbCritical, "Fehler"
'Setze Zellwert zurück
Target.Value = ""
End If
Else
'Eingabe war kein Datum
MsgBox "Der Eingabewert ist ungültig, es muss ein Datum eingeben werden", vbCritical, "Fehler"
Target.Value = ""
End If
End If
End If
End Sub
Grüße Uwe