dockmaster-de
Goto Top

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

Content-ID: 224366

Url: https://administrator.de/contentid/224366

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

bastla
bastla 12.12.2013 um 17:41:13 Uhr
Goto Top
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
=L20<($C20+$D20)
(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
DockMaster-de
DockMaster-de 12.12.2013 um 17:50:49 Uhr
Goto Top
Hallo,

Zitat von @bastla:

Hallo DockMaster-de!

Was soll denn nach der Überprüfung weiter passieren?
...

Grüße
bastla

ganz vergessen...
Die Zellen sollen für eine Eingabe gesperrt werden und eine Fehlermeldung erscheinen.
Die Formel von dir habe ich schon in der Datenüberprüfung genutzt. Da das Tabellenblatt mit Formatierungen überzogen ist, müsste ich jede einzelne Zelle bearbeiten und deswegen dachte ich an einen VBA Code.

MfG

DockM@ster
colinardo
colinardo 12.12.2013 aktualisiert um 19:17:15 Uhr
Goto Top
Hallo DockM@ster,
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.
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)
Wenn es unbedingt VBA sein muss, aus welchen Gründen auch immer face-wink kannst du folgenden Code in das entsprechende Sheet im VBA-Editor einfügen:
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
Kommentare im Code.

Grüße Uwe
DockMaster-de
DockMaster-de 12.12.2013 um 20:15:08 Uhr
Goto Top
Vielen Dank an alle für die Vorschläge. Ich werde mich jetzt mal mit dem VBA-Code auseinander setzen.

MfG

DockM@ster