Anzeige
Archiv - Navigation
1956to1960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Urlaubskalender

Urlaubskalender
07.12.2023 20:09:46
Markus1805
Hallo zusammen ich bräuchte mal Eure Hilfe: Ich erstelle gerade einen Urlaubskalender für meine Kollegen, Es soll eine Msgbox aufploppen wenn zuviele gleichzeitg sich mit Urlaub eintragen.Rechts neben dem Namen sind die Tage des Kalenders wo man ein "U" einträgt.Tragen 3 oder mehr sich ein ploppt die Hinweisbox auf (Überschneidung Urlaub,Bitte abklären o.ä) damit nicht nicht zuviele Abwesend sind. Die "U"s werden also in einer Extraspalte (Abwesend: x ) addiert.
Wird die 3 oder höher erreicht ploppt die Box nur 1x auf und nicht bei jeder Zelleingabe (..nervt) Klappt soweit wenn sich 3 Mitarbeiter eintragen.
Leider aber auch wenn sich 1 Mitarbeiter an 3 Tagen in seiner Spalte nebenander einträgt(Abwesendheitspalte oben dann : 1 + 1 +1 ,also 3) Die Spalte wird addiert sobald es 3 ergibt mit der Msbox. Das macht so keinen Sinn aber ich krieg es einfach nicht hin. Hier mein Code den ich gebastelt habe :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Summe As Integer
Summe = Application.Sum(Range("H3:NH3"))
If Summe Mod 3 = 0 And Summe > Nureinmal Then
MsgBox "Abwesenheit kritisch!!" & vbLf & "" & vbLf & "Bitte Vertetung klären" & _
vbLf & "" & vbLf & " - DANKE -", vbInformation, "Urlaubsüberschneidung"
Nureinmal = Summe
End If
End Sub
https://www.herber.de/bbs/user/164930.xlsm

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Urlaubskalender
07.12.2023 20:49:26
Alwin Weisangler
Hallo,

ändere es so:


Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSp&
If Not Intersect(Target, Range("rng_Eintrag")) Is Nothing Then
iSp = Target.Cells.Column
If Cells(3, iSp) >= 3 Then
MsgBox "Abwesenheit kritisch!!" & vbLf & "" & vbLf & "Bitte Vertetung klären" & _
vbLf & "" & vbLf & " - DANKE -", vbInformation, "Urlaubsüberschneidung"
End If
End If
End Sub


Gruß Uwe
Anzeige
AW: Urlaubskalender
08.12.2023 19:04:47
Markus1805
Hallo Uwe, ja das klappt. Allerdings nur wenn ich in der Abwesenheitsspalte direkt die 3 eingebe.Da in diesen Spalten aber Formeln stehen die die "U"Summen anzeigen funktioniert es leider nicht auch wenn dort eine 3 erscheint. Gruß Markus
AW: Urlaubskalender
09.12.2023 18:48:14
Alwin Weisangler
Hallo Markus,
in den Zellen ab Zeile 9 der Spalten sind DropDowns und keine Formeln. Die Änderungen mit DropDowwns der Zellen ab Zeile9 werden als Auslöseereignis herangezogen.
Lediglich der Wert der darüberliegenden Zelle in Zeile 3 wir zu Auswertung herangezogen und startet die MsgBox falls 3 erreicht.
Wenn du eine getrennte Meldung für U / G / 0,5U haben willst geht das mit Application.CountIf().
Eine Abwesenheitsspalte kann ich nicht finden. Lediglich die Zelle F3 steht Abwesenheit.
Damit wir nicht aneinander vorbeischreiben. Trage bitte die Werte in die Tabelle so ein, dass ich die Vorgehensweise auswerten kann, welche zum Auslösen der MsgBox führen soll und lade diese Datei hoch.

Gruß Uwe
Anzeige
AW: Urlaubskalender
10.12.2023 12:05:39
Markus1805
Hallo Uwe und einen schöne 2 Advent :-). Ich lege mal 2 Screenshots ab damit Du weißt wo das Problem ist . In den Spalten I3 bis Ni3 sind Formeln hinterlegt.Das Auslöseereignis soll in diesen Spalten die "3" sein.Das klappt aber nicht da der VBA Code das Formelergebnis nicht erkennt.

Userbild
Userbild

Danke und Gruß Markus


AW: Urlaubskalender
10.12.2023 13:20:46
Alwin Weisangler
Hallo Markus,
teste mal.


Private Sub Worksheet_Calculate()
Dim i&
With ListObjects("Tabelle4").DataBodyRange
For i = 8 To .Columns.Count
If Application.WorksheetFunction.CountIf(.Columns(i), "*") >= 3 Then MsgBox "Es gibt mindestens 3 Überschneidungen am: " & CDate(Cells(7, i + 1))
Next i
End With
End Sub


Gruß Uwe




Anzeige
AW: Urlaubskalender
10.12.2023 18:56:02
Markus1805
Hallo Uwe, das klappt schonmal super ! Danke :-) Damit kann ich schonmal viel anfangen. Schön wäre es jetzt noch (Als i tüpfelchen) wenn man mit der Eingabe "Ingnorieren" oder so in der MsgBox die Meldung deaktivieren könnte,bzw. nur einmal durchlaufen (For Next Schleife oder so ?,sorry bin VBA Grundschüler) Manchmal sprechen sich die Kollegen ja für eine Überschneidung an z.B :einem Tag ab.Aktuell ploppt die MsgBox bei jeder Zelleingaben neu auf.auch wenn es an den Folgetagen keine Überschneidungen mehr gibt.Das wäre noch ein Bonus :-).Aber Du hast mir hier schon sehr geholfen----Vielen Dank .l Markus
Anzeige
AW: Urlaubskalender
11.12.2023 09:09:18
Alwin Weisangler
Hallo Markus,

da ich das schon befürchtet hatte, steht in der MsgBox das Datum der Spalte.
Das taucht deswegen auf, weil die Spaltennummer ermittelt ist.
Wenn du jetzt auf die MsgBox verzichtest und stattdessen in dieser Schleife die Treffer in einem Array nebst gewünschtem Vermerk sammelst und dieses Array in Zeile 1 mit Text übergibst, hast du etwas was nicht stört und trotzdem wahrgenommen wird, wo 3 oder mehrere Überschneidungen vorliegen.
Beschäftige dich mit diesem Code und nutzte diesen, um die Prozedur entsprechend meines Vorschlages umzubauen. Dabei lernst du auch etwas.

Gruß Uwe
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige