Registriert seit: 31.08.2019
Version(en): 2019
Hallo Leute,
in meinem Arbeitsblatt wird im Bereich C5:C35 mit Rechtsklick über ein Makro "Urlaub" eingetragen. Das funktioniert auch.
Die Resturlaubstage stehen in I4.
Wie kann man das Makro dahingehend erweitern, dass die Meldung "Keine Urlaubstage mehr vorhanden!" angezeigt wird, wenn die Urlaubstage aufgebraucht sind? Der Eintrag "Urlaub" soll dann nicht erfolgen:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
ActiveSheet.Unprotect
If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
Cancel = True
If Target = "" Then
Select Case Target.Column
Case 3
Target = "Urlaub"
Target.Font.ColorIndex = 50
' Target.Offset(0, 6) = CDate("1:58")
End Select
Else
Target = ""
' Target.Offset(0, 6).ClearContents
Target.Font.ColorIndex = xlAutomatic
End If
End If
ActiveSheet.Protect
End Sub
Gruß
ossi
Registriert seit: 05.09.2019
Version(en): Office 365
05.09.2019, 14:52
(Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2019, 14:52 von UweD.)
Hallo
eventuell so??
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim RNG As Range, UMax As Integer
Set RNG = Range("C5:C35")
UMax = 20 'Maximale Urlaubstage
ActiveSheet.Unprotect
If Not Intersect(Target, RNG) Is Nothing Then
Cancel = True
If Target = "" Then
Select Case Target.Column
Case 3
If WorksheetFunction.CountIf(RNG, "Urlaub") < UMax Then
Target = "Urlaub"
Target.Font.ColorIndex = 50
' Target.Offset(0, 6) = CDate("1:58")
Else
MsgBox "Max erreicht"
End If
End Select
Else
Target = ""
' Target.Offset(0, 6).ClearContents
Target.Font.ColorIndex = xlAutomatic
End If
End If
ActiveSheet.Protect
End Sub
LG UweD
Registriert seit: 31.08.2019
Version(en): 2019
Hallo UweD,
ich musste weg und bin erst jetzt wieder hier.
Also:
Ich muss im Makro die maximalen Urlaubstage eintragen, damit es funktioniert.
Da sich die Resturlaubstage jeden Monat ändern ändern können, sollte immer Bezug auf die Resturlaubstage in I4 genommen werden.
Bei der Meldung dachte ich an eine Msg-Box Hinweis in der Art:
MsgBox "Max. Urlaubstage erreicht"_vbExclamation, "Hinweis"
Ist das zu machen?
Gruß
ossi
Registriert seit: 31.08.2019
Version(en): 2019
Muster3.xls (Größe: 714 KB / Downloads: 11)
am Besten ist, wenn du dir die Mustermappe anschaust.
Die Gesamt-Urlaubstage werden im Blatt Jan manuell in I4 eingetragen. Die Resturlaubstage in I4 der anderen Monatsblätter basieren auf einer Formel.
Gruß
ossi
Registriert seit: 05.09.2019
Version(en): Office 365
Hallo nochmal
das ist aber doch jetzt keine große Änderung.
Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim RNG As Range, UMax As Integer
Set RNG = Range("C5:C35")
UMax = Range("I4")
'Maximale Urlaubstage
ActiveSheet.Unprotect
If Not Intersect(Target, RNG) Is Nothing Then
Cancel = True
If Target = "" Then
Select Case Target.Column
Case 3
If WorksheetFunction.CountIf(RNG, "Urlaub") < UMax Then
Target = "Urlaub"
Target.Font.ColorIndex = 50
' Target.Offset(0, 6) = CDate("1:58")
Else
MsgBox "Max. Urlaubstage erreicht", vbExclamation, "Hinweis"
End If
End Select
Else
Target = ""
' Target.Offset(0, 6).ClearContents
Target.Font.ColorIndex = xlAutomatic
End If
End If
ActiveSheet.Protect
End Sub
LG UweD
Registriert seit: 31.08.2019
Version(en): 2019
Ja UweD so klappt's. Prima.
Wenn die Urlaubstage aufgebraucht sind, bleibt I4 leer. Wie kann man erreichen, dass "0" angezeigt wird?
LG ossi
Registriert seit: 05.09.2019
Version(en): Office 365
Bei Standardeinstellungen wird die 0 auch angezeigt.
gast du unter Datei, Optionen, ...
die Anzeige der Nullen abgeschaltet?
Siehe Foto
LG UweD
Registriert seit: 31.08.2019
Version(en): 2019
Ja die Anzeige von Nullen ist ausgeschaltet. So soll's auch sein, denn sonst werden überall Nullwerte angezeigt die ich nicht will.
Ich möchte eigentlich nur, dass in I4 die 0 angezeigt wird und die Zelle nicht leer bleibt.
Geht das überhaupt?
LG ossi
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
06.09.2019, 18:50
(Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2019, 18:50 von Käpt'n Blaubär.)
Hallo,
Zitat:Ich möchte eigentlich nur, dass in I4 die 0 angezeigt wird und die Zelle nicht leer bleibt.
Geht das überhaupt?
... der einfachste Weg? mache aus der
0(Zahl) einen
"0"Text, oder einen
'0Text
Registriert seit: 29.09.2015
Version(en): 2030,5
Verwende 'Validation' in C5:C35.
Und m Workbook Modul:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$I$4" And Len(Sh.Name) = 3 Then Sh.Range("C5:C35").Validation.Modify 3, , , Join([transpose(row(offset(A1,,,I4)))], ",")
End Sub
Verzichte auf verbundene Zellen