HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Passant
24.05.2026 09:28:29
AW: Da ist mindestens....
Moin Case,
die Lösung mit der Input-Box ist genial! War total überrascht, als ich deine Datei ausprobiert habe. Auf diese Idee wäre ich überhaupt nicht gekommen und umsetzen hätte ich sie natürlich erst recht nicht können. Vielen Dank dafür!

Jetzt ergibt sich leider ein weiteres Problem, an das ich vorher nicht gedacht habe: Immer wenn eine Dropdownliste in B einen der Werte: Urlaub, Feiertag, Krankheit, Überstunden hat, soll C und D jeweils den Wert 00:00 erhalten. Ich habe in der Dropdownliste auch noch ein Leerzeichen (Alt 0160) als Wert, wenn das ausgewählt wird, oder der jeweilige Wert in der Liste gelöscht wird, sollen auch C und D wieder leer sein.

Bevor ich deine Lösung hatte, hatte ich immer z.B. an einem Montag die Dropdownliste auf Urlaub gestellt, und sie dann bis Freitag runtergezogen, so dass die komplette Woche den Wert Urlaub hatte. Das gleiche dann in der nächsten Woche. Im Modul1 hatte ich dann diesen Code, der dafür sorgte, dass C und D dann immer 00:00 war, oder eben leer:

Sub HandleChangeForSheet(ByVal Target As Range, ByVal ws As Worksheet)
Dim rng As Range
Dim zelle As Range
' Prüfen, ob die Änderung in Spalte B (Spalte 2) erfolgt ist
Set rng = Intersect(Target, ws.Columns(2))
If rng Is Nothing Then Exit Sub
Application.EnableEvents = False
On Error GoTo 0
For Each zelle In rng
If zelle.Value = "Urlaub" Or zelle.Value = "Feiertag" Or zelle.Value = "Krankheit" Or zelle.Value = "Überstd.-Abb." Or zelle.Value = "Schulung" Then
' Setze C und D der gleichen Zeile auf 00:00, wenn Text in B ausgewählt ist bzw. leer
ws.Cells(zelle.Row, 3).Value = "00:00"
ws.Cells(zelle.Row, 4).Value = "00:00"
Else
' Optional: Falls andere Werte zukünftig erlaubt, C und D ggf. leeren
ws.Cells(zelle.Row, 3).Value = ""
ws.Cells(zelle.Row, 4).Value = ""
End If
Next zelle
Application.EnableEvents = True
End Sub

Den hatte ich im Tabellenblatt aufgerufen:
Private Sub Worksheet_Change(ByVal Target As Range)
Call HandleChangeForSheet(Target, Me)
End Sub

Das funktioniert jetzt nicht mehr hast du noch eine Idee, wie ich das mit deinem Code lösen kann?
Als Antwort auf diesen Beitrag
Case
23.05.2026 21:37:10
Da ist mindestens....
Moin, :-)

... ein Fehler drin: ;-)

Das hier: ;-)
For Each c In Range(rngSel)

Wirft dir einen 1004rer Fehler raus. ;-)

So läuft es: ;-)
'.....

For Each c In Range(rngSel.Address)
'If Not Intersect(c, Target) Is Nothing Then
' Überspringe schreibgeschützte Zellen
If Not c.Locked Then
c.Value = newValue
End If
'End If
Next

Cleanup:
If Err.Number <> 0 Then MsgBox Err.Number & vbLf & Err.Description
Application.EnableEvents = True
End Sub

Du siehst dann auch, wenn du einen Fehler machst. ;-)

Aber du willst wahrscheinlich nicht alle ausfüllen? ;-)
https://www.herber.de/bbs/user/180734.xlsb

Man kann noch Feiertage ausgrenzen, oder nur leere Zellen ausfüllen, oder... ;-)

Servus
Case
Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.