Überprüfen, ob die berechnete Zelle den Sollwert erreicht hat
#1
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

  End If
End Sub

Gruß Ubi5

Habe die Datei vergessen!

Gruß Ubi5


Angehängte Dateien
.xlsm   Test1.xlsm (Größe: 16,46 KB / Downloads: 5)
Antworten Top
#2
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)
Antworten Top
#3
Hallo Ralf,

das hat sehr wohl einen Sinn - es wird abgeklärt ob die Sollvorgabe (Stunden) erreicht wurden  als Info - siehe Datei.

Gruß Ubi5

Hallo Ralf,

mich interessiert ob überhaupt meine Vorstellung machbar ist.

Gruß Ubi5
Antworten Top
#4
Hi,

warum mit VBA? Es reicht doch eine einfache bedF:

Code:
=($G4>=F4)*($E4<>"")

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.
Antworten Top
#5
Hallo

Hier auch noch eine VBA Lösung von mir.

Code:
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
           
            End If
        End If
    End If
End Sub

LG UweD
Antworten Top
#6
Hallo Edgar,

habe deine Anweisung verstanden - funktioniert - leider bekomme ich das Schließen nach 3 Sekunden nicht mehr hin.

Gruß Ubi5

Hallo UweD, 

deine Hilfestellung funktioniert einwandfrei - Danke!

Gruß Ubi5
Antworten Top
#7
(31.07.2025, 14:22)Ubi5 schrieb: Hallo Ralf,

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)
Antworten Top
#8
Hallo nochmal

Noch eine Möglichkeit über Datenüberprüfung

- Markiere D4 bis F100 (Länge anpassen)
- Daten, Datentools, Datenüberprüfung

- Bei Einstellungen: 
 - - Zulassen: Benutzerdefiniert
 - - Formel: =$H4<=0

- Bei Fehlermeldung deinen Hinweistext eintragen


- OK

LG UweD
Antworten Top
#9
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.

Nochmals Danke!

Gruß Ubi5
Antworten Top
#10
Hi,

dann hast Du uns eine falsche Datei vorgestellt. Selbst schuld.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste