31.07.2025, 14:07 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2025, 14:11 von Ubi5.)
Hallo, vielleicht kann jemand mir bitte weiterhelfen - Danke!
Tieferstehender Code funktioniert soweit - das Problem liegt darin, dass immer nur auf die Zelle "H4" zugegriffen wird - siehe Beispieldatei. Den Code würde ich gerne in eine Zeiterfassung einbauen.
Private Sub Worksheet_Calculate() ' Überprüfen, ob die berechnete Zelle den Zielwert enthält If ThisWorkbook.Sheets("Tabelle1").Range("H4").Value >= "0:00" Then ' Nachrichtenbox anzeigen 'MsgBox "Die Sollstunden wurden erreicht!", vbInformation, "Info"
Application.Wait (Now + TimeValue("0:00:01"))
Dim wsh As Object Set wsh = VBA.CreateObject("WScript.Shell")
'wsh.Popup "Die Sollstunden wurden erreicht!", 1, "Info" Set wsh = Nothing 'Dim wsh As Object Set wsh = VBA.CreateObject("WScript.Shell") wsh.Popup "Die Sollstunden wurden erreicht!", 1, "Automatische Schließung" Set wsh = Nothing
Moin! VBA? Wofür? So etwas regelt man doch besser mittels bedingter Formatierung oder Datengültigkeit.
Nimm es mir nicht übel: Dies vor allem aufgrund Deiner VBA-Kenntnisse! Was soll der Quatsch mit Range("H4").Value >= "0:00" "Ralf" ist auch größer als "0:00"
Calculate ist das falsche Ereignis. Es sei denn, Du willst nach jeder Berechnung mit einer MsgBox belästigt werden …
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
und einfärben, alternativ Grundfarbe der Zellen rot und mit der bedF weiß färben.
Wenn Du unbedingt VBA willst, dann nicht so, wie Du es angefangen hast. Evtl. so:
Code:
Option Explicit
Private Sub Worksheet_change(ByVal Target As Range) Dim loA As Long If Intersect(Target.Columns, Columns(5)) Is Nothing Then Exit Sub With ThisWorkbook.Sheets("Tabelle1") loA = .Cells(Rows.Count, 5).End(xlUp).Row If .Cells(loA, 7) >= .Cells(loA, 6) Then MsgBox "Die Sollstunden wurden erreicht!", vbExclamation End With End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr! Über Rückmeldungen würde ich mich freuen.
Private Sub Worksheet_Change(ByVal Target As Range) Dim RNG As Range, wsh As Object Set RNG = Range("D:F")
If Not Intersect(Target, RNG) Is Nothing Then If WorksheetFunction.Count(Intersect(Rows(Target.Row), RNG)) = 3 Then ' alle 3 Spalten enthalten Werte If Cells(Target.Row, 8) > 0 Then 'Hnweis
Application.Wait (Now + TimeValue("0:00:01"))
Set wsh = VBA.CreateObject("WScript.Shell") wsh.Popup "Die Sollstunden wurden erreicht!", 1, "Automatische Schließung" Set wsh = Nothing
das hat sehr wohl einen Sinn - es wird abgeklärt ob die Sollvorgabe (Stunden) erreicht wurden als Info - siehe Datei.
Du hast mich nicht verstanden! Zu prüfen, ob ein Wert >= einem TEXT "0:00" ist, ist … suboptimal, eher Quatsch. Deshalb schrieb ich ja, dass auch "Ralf" >= "0:00" ist! In diesem Zusammenhang: "2:00" ist größer als "19:00" Willst Du wirklich so prüfen?
Gut, Du hast jetzt eine Lösung, dennoch frage ich mich, ob sie Dir in einer Produktivumgebung wirklich nutzt.
Sehr viel besser wäre es, wenn Du meinem und Edgars Rat folgen würdest und auf VBA verzichtest!
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Recht herzlichen Dank - an Ralf, Edgar und UweD - für die Vorschläge und Hilfestellung.
Leider lässt sich der Code wie in der Musterdatei in meine ausführliche Zeiterfassung mit 2mal kommen 2 mal gehen plus Überstundenberechnung usw. nicht umsetzen.