Hallo
es ist kein Problem eine VBA Lösung zu finden, aber die Logik der Auswertung darf sich nicht selbst "ins Knie schiessen"!
Ich habe deinen Code mal so erweitert, das bei Union auch die Zellle rngE27 ausgewertet wird. Die Mitarbeiter Eingabe.
Die IF Then Auswertung habe ich geändert, s. unten. Am Anfang wird jetzt zuerst immer der Wert 39,00 in D34 gesetzt.
Wenn aber in den Zellen D42 oder E42 Werte stehen, werden
diese Werte IMMER nach D34 übertragen! Logisch!
Ob das richtig oder falsch ist kann ich nicht beurteilen, ich habe diese Datei ja nicht aufgebaut.
Beim testen schrieb ich einmal versehentlich einen Wert in Zelle E42, als sie zufällig nicht gesperrt war.
Der bleibt dann ewig drin stehen, weil das Makro diese Zelle auf Protected setzt, nicht von Hand änderbar.
Der Text "Name" steht in der Zelle D27, Eingabe in E27. Und in Zelle D40, DropDown Liste in E40.
Warum ist oben KEINE DropDown Liste?? Nur unten??
Ich weiss nicht ob dir der geänderte VBA Code weiterhilft. Leider funktionieren einige Formeln bei mir nicht richtig.
Ich habe nur eine alte Excel 2003 Version, musste die Datei mit LibreOffice konvertieren. Da huddelt es manchmal.
mfg Gast 123
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet, pass As String
Dim rngD42 As Range, rngE42 As Range, rngD34 As Range, rngE40 As Range, rngE27 As Range
' Set the worksheet
Set ws = ThisWorkbook.Sheets("Startseite")
' Set password
pass = "ask2019"
' Check if the changed cell is within the specified range
Set rngD42 = ws.Range("D42") '** Formel
Set rngE42 = ws.Range("E42") '** Formelergebnis
Set rngD34 = ws.Range("D34") 'Arbeitszeit wöchentlich
Set rngE40 = ws.Range("E40") '** -Name Eingabe
Set rngE27 = ws.Range("E27") 'Name Eingabe ganz oben
If Not Intersect(Target, Union(rngE27, rngD42, rngE42, rngE40)) Is Nothing Then
' Unprotect the worksheet
ws.Unprotect pass
On Error GoTo ende
Application.EnableEvents = False
' Check conditions and update D34 accordingly
rngD34.Value = "39"
If rngD42 <> "" Then rngD34.Value = rngD42.Value
If rngE42 <> "" Then rngD34.Value = rngE42.Value
If rngE40 <> "" Then rngE27.Value = rngE40.Value
' Protect the worksheet
ende: Application.EnableEvents = True
ws.Protect pass
End If
End Sub
Nachtrag bei der Auswertung bitte beachten welche IF Then Anweisung den Vorrang hat!
Es ist schon ein Unterschied ob man rngD42 oder rngE42 zuerst auswertet!!